//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS SSM service.
///
/// Amazon Web Services Systems Manager is the operations hub for your Amazon Web Services applications and resources and a secure end-to-end management solution for hybrid cloud environments that enables safe and secure operations at scale. This reference is intended to be used with the Amazon Web Services Systems Manager User Guide. To get started, see Setting up Amazon Web Services Systems Manager.  Related resources    For information about each of the tools that comprise Systems Manager, see Using Systems Manager tools in the Amazon Web Services Systems Manager User Guide.   For details about predefined runbooks for Automation, a tool in Amazon Web Services Systems Manager, see the  Systems Manager Automation Runbook Reference .   For information about AppConfig, a tool in Systems Manager, see the  AppConfig User Guide  and the  AppConfig API Reference .   For information about Incident Manager, a tool in Systems Manager, see the  Systems Manager Incident Manager User Guide and the  Systems Manager Incident Manager API Reference .
public struct SSM: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the SSM client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "AmazonSSM",
            serviceName: "SSM",
            serviceIdentifier: "ssm",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2014-11-06",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: SSMErrorType.self,
            xmlNamespace: "http://ssm.amazonaws.com/doc/2014-11-06/",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "ca-central-1": "ssm-fips.ca-central-1.amazonaws.com",
            "ca-west-1": "ssm-fips.ca-west-1.amazonaws.com",
            "us-east-1": "ssm-fips.us-east-1.amazonaws.com",
            "us-east-2": "ssm-fips.us-east-2.amazonaws.com",
            "us-gov-east-1": "ssm.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "ssm.us-gov-west-1.amazonaws.com",
            "us-west-1": "ssm-fips.us-west-1.amazonaws.com",
            "us-west-2": "ssm-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Adds or overwrites one or more tags for the specified resource. Tags are metadata that you can assign to your automations, documents, managed nodes, maintenance windows, Parameter Store parameters, and patch baselines. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment. Each tag consists of a key and an optional value, both of which you define. For example, you could define a set of tags for your account's managed nodes that helps you track each node's owner and stack level. For example:    Key=Owner,Value=DbAdmin     Key=Owner,Value=SysAdmin     Key=Owner,Value=Dev     Key=Stack,Value=Production     Key=Stack,Value=Pre-Production     Key=Stack,Value=Test    Most resources can have a maximum of 50 tags. Automations can have a maximum of 5 tags. We recommend that you devise a set of tag keys that meets your needs for each resource type. Using a consistent set of tag keys makes it easier for you to manage your resources. You can search and filter the resources based on the tags you add. Tags don't have any semantic meaning to and are interpreted strictly as a string of characters. For more information about using tags with Amazon Elastic Compute Cloud (Amazon EC2) instances, see Tag your Amazon EC2 resources in the Amazon EC2 User Guide.
    @Sendable
    @inlinable
    public func addTagsToResource(_ input: AddTagsToResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddTagsToResourceResult {
        try await self.client.execute(
            operation: "AddTagsToResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds or overwrites one or more tags for the specified resource. Tags are metadata that you can assign to your automations, documents, managed nodes, maintenance windows, Parameter Store parameters, and patch baselines. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment. Each tag consists of a key and an optional value, both of which you define. For example, you could define a set of tags for your account's managed nodes that helps you track each node's owner and stack level. For example:    Key=Owner,Value=DbAdmin     Key=Owner,Value=SysAdmin     Key=Owner,Value=Dev     Key=Stack,Value=Production     Key=Stack,Value=Pre-Production     Key=Stack,Value=Test    Most resources can have a maximum of 50 tags. Automations can have a maximum of 5 tags. We recommend that you devise a set of tag keys that meets your needs for each resource type. Using a consistent set of tag keys makes it easier for you to manage your resources. You can search and filter the resources based on the tags you add. Tags don't have any semantic meaning to and are interpreted strictly as a string of characters. For more information about using tags with Amazon Elastic Compute Cloud (Amazon EC2) instances, see Tag your Amazon EC2 resources in the Amazon EC2 User Guide.
    ///
    /// Parameters:
    ///   - resourceId: The resource ID you want to tag. Use the ID of the resource. Here are some examples:  MaintenanceWindow: mw-012345abcde   PatchBaseline: pb-012345abcde   Automation: example-c160-4567-8519-012345abcde   OpsMetadata object: ResourceID for tagging is created from the Amazon Resource Name (ARN) for the object. Specifically, ResourceID is created from the strings that come after the word opsmetadata in the ARN. For example, an OpsMetadata object with an ARN of arn:aws:ssm:us-east-2:1234567890:opsmetadata/aws/ssm/MyGroup/appmanager has a ResourceID of either aws/ssm/MyGroup/appmanager or /aws/ssm/MyGroup/appmanager. For the Document and Parameter values, use the name of the resource. If you're tagging a shared document, you must use the full ARN of the document.  ManagedInstance: mi-012345abcde   The ManagedInstance type for this API operation is only for on-premises managed nodes. You must specify the name of the managed node in the following format: mi-ID_number . For example, mi-1a2b3c4d5e6f.
    ///   - resourceType: Specifies the type of resource you are tagging.  The ManagedInstance type for this API operation is for on-premises managed nodes. You must specify the name of the managed node in the following format: mi-ID_number . For example, mi-1a2b3c4d5e6f.
    ///   - tags: One or more tags. The value parameter is required.  Don't enter personally identifiable information in this field.
    ///   - logger: Logger use during operation
    @inlinable
    public func addTagsToResource(
        resourceId: String,
        resourceType: ResourceTypeForTagging,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddTagsToResourceResult {
        let input = AddTagsToResourceRequest(
            resourceId: resourceId, 
            resourceType: resourceType, 
            tags: tags
        )
        return try await self.addTagsToResource(input, logger: logger)
    }

    /// Associates a related item to a Systems Manager OpsCenter OpsItem. For example, you can associate an Incident Manager incident or analysis with an OpsItem. Incident Manager and OpsCenter are tools in Amazon Web Services Systems Manager.
    @Sendable
    @inlinable
    public func associateOpsItemRelatedItem(_ input: AssociateOpsItemRelatedItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AssociateOpsItemRelatedItemResponse {
        try await self.client.execute(
            operation: "AssociateOpsItemRelatedItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates a related item to a Systems Manager OpsCenter OpsItem. For example, you can associate an Incident Manager incident or analysis with an OpsItem. Incident Manager and OpsCenter are tools in Amazon Web Services Systems Manager.
    ///
    /// Parameters:
    ///   - associationType: The type of association that you want to create between an OpsItem and a resource. OpsCenter supports IsParentOf and RelatesTo association types.
    ///   - opsItemId: The ID of the OpsItem to which you want to associate a resource as a related item.
    ///   - resourceType: The type of resource that you want to associate with an OpsItem. OpsCenter supports the following types:  AWS::SSMIncidents::IncidentRecord: an Incident Manager incident.   AWS::SSM::Document: a Systems Manager (SSM) document.
    ///   - resourceUri: The Amazon Resource Name (ARN) of the Amazon Web Services resource that you want to associate with the OpsItem.
    ///   - logger: Logger use during operation
    @inlinable
    public func associateOpsItemRelatedItem(
        associationType: String,
        opsItemId: String,
        resourceType: String,
        resourceUri: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AssociateOpsItemRelatedItemResponse {
        let input = AssociateOpsItemRelatedItemRequest(
            associationType: associationType, 
            opsItemId: opsItemId, 
            resourceType: resourceType, 
            resourceUri: resourceUri
        )
        return try await self.associateOpsItemRelatedItem(input, logger: logger)
    }

    /// Attempts to cancel the command specified by the Command ID. There is no guarantee that the command will be terminated and the underlying process stopped.
    @Sendable
    @inlinable
    public func cancelCommand(_ input: CancelCommandRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelCommandResult {
        try await self.client.execute(
            operation: "CancelCommand", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attempts to cancel the command specified by the Command ID. There is no guarantee that the command will be terminated and the underlying process stopped.
    ///
    /// Parameters:
    ///   - commandId: The ID of the command you want to cancel.
    ///   - instanceIds: (Optional) A list of managed node IDs on which you want to cancel the command. If not provided, the command is canceled on every node on which it was requested.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelCommand(
        commandId: String,
        instanceIds: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelCommandResult {
        let input = CancelCommandRequest(
            commandId: commandId, 
            instanceIds: instanceIds
        )
        return try await self.cancelCommand(input, logger: logger)
    }

    /// Stops a maintenance window execution that is already in progress and cancels any tasks in the window that haven't already starting running. Tasks already in progress will continue to completion.
    @Sendable
    @inlinable
    public func cancelMaintenanceWindowExecution(_ input: CancelMaintenanceWindowExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CancelMaintenanceWindowExecutionResult {
        try await self.client.execute(
            operation: "CancelMaintenanceWindowExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a maintenance window execution that is already in progress and cancels any tasks in the window that haven't already starting running. Tasks already in progress will continue to completion.
    ///
    /// Parameters:
    ///   - windowExecutionId: The ID of the maintenance window execution to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func cancelMaintenanceWindowExecution(
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CancelMaintenanceWindowExecutionResult {
        let input = CancelMaintenanceWindowExecutionRequest(
            windowExecutionId: windowExecutionId
        )
        return try await self.cancelMaintenanceWindowExecution(input, logger: logger)
    }

    /// Generates an activation code and activation ID you can use to register your on-premises servers, edge devices, or virtual machine (VM) with Amazon Web Services Systems Manager. Registering these machines with Systems Manager makes it possible to manage them using Systems Manager tools. You use the activation code and ID when installing SSM Agent on machines in your hybrid environment. For more information about requirements for managing on-premises machines using Systems Manager, see Using Amazon Web Services Systems Manager in hybrid and multicloud environments in the Amazon Web Services Systems Manager User Guide.   Amazon Elastic Compute Cloud (Amazon EC2) instances, edge devices, and on-premises servers and VMs that are configured for Systems Manager are all called managed nodes.
    @Sendable
    @inlinable
    public func createActivation(_ input: CreateActivationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateActivationResult {
        try await self.client.execute(
            operation: "CreateActivation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates an activation code and activation ID you can use to register your on-premises servers, edge devices, or virtual machine (VM) with Amazon Web Services Systems Manager. Registering these machines with Systems Manager makes it possible to manage them using Systems Manager tools. You use the activation code and ID when installing SSM Agent on machines in your hybrid environment. For more information about requirements for managing on-premises machines using Systems Manager, see Using Amazon Web Services Systems Manager in hybrid and multicloud environments in the Amazon Web Services Systems Manager User Guide.   Amazon Elastic Compute Cloud (Amazon EC2) instances, edge devices, and on-premises servers and VMs that are configured for Systems Manager are all called managed nodes.
    ///
    /// Parameters:
    ///   - defaultInstanceName: The name of the registered, managed node as it will appear in the Amazon Web Services Systems Manager console or when you use the Amazon Web Services command line tools to list Systems Manager resources.  Don't enter personally identifiable information in this field.
    ///   - description: A user-defined description of the resource that you want to register with Systems Manager.   Don't enter personally identifiable information in this field.
    ///   - expirationDate: The date by which this activation request should expire, in timestamp format, such as "2024-07-07T00:00:00". You can specify a date up to 30 days in advance. If you don't provide an expiration date, the activation code expires in 24 hours.
    ///   - iamRole: The name of the Identity and Access Management (IAM) role that you want to assign to the managed node. This IAM role must provide AssumeRole permissions for the Amazon Web Services Systems Manager service principal ssm.amazonaws.com. For more information, see Create the IAM service role required for Systems Manager in a hybrid and multicloud environments in the Amazon Web Services Systems Manager User Guide.  You can't specify an IAM service-linked role for this parameter. You must create a unique role.
    ///   - registrationLimit: Specify the maximum number of managed nodes you want to register. The default value is 1.
    ///   - registrationMetadata: Reserved for internal use.
    ///   - tags: Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag an activation to identify which servers or virtual machines (VMs) in your on-premises environment you intend to activate. In this case, you could specify the following key-value pairs:    Key=OS,Value=Windows     Key=Environment,Value=Production     When you install SSM Agent on your on-premises servers and VMs, you specify an activation ID and code. When you specify the activation ID and code, tags assigned to the activation are automatically applied to the on-premises servers or VMs.  You can't add tags to or delete tags from an existing activation. You can tag your on-premises servers, edge devices, and VMs after they connect to Systems Manager for the first time and are assigned a managed node ID. This means they are listed in the Amazon Web Services Systems Manager console with an ID that is prefixed with "mi-". For information about how to add tags to your managed nodes, see AddTagsToResource. For information about how to remove tags from your managed nodes, see RemoveTagsFromResource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createActivation(
        defaultInstanceName: String? = nil,
        description: String? = nil,
        expirationDate: Date? = nil,
        iamRole: String,
        registrationLimit: Int? = nil,
        registrationMetadata: [RegistrationMetadataItem]? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateActivationResult {
        let input = CreateActivationRequest(
            defaultInstanceName: defaultInstanceName, 
            description: description, 
            expirationDate: expirationDate, 
            iamRole: iamRole, 
            registrationLimit: registrationLimit, 
            registrationMetadata: registrationMetadata, 
            tags: tags
        )
        return try await self.createActivation(input, logger: logger)
    }

    /// A State Manager association defines the state that you want to maintain on your managed nodes. For example, an association can specify that anti-virus software must be installed and running on your managed nodes, or that certain ports must be closed. For static targets, the association specifies a schedule for when the configuration is reapplied. For dynamic targets, such as an Amazon Web Services resource group or an Amazon Web Services autoscaling group, State Manager, a tool in Amazon Web Services Systems Manager applies the configuration when new managed nodes are added to the group. The association also specifies actions to take when applying the configuration. For example, an association for anti-virus software might run once a day. If the software isn't installed, then State Manager installs it. If the software is installed, but the service isn't running, then the association might instruct State Manager to start the service.
    @Sendable
    @inlinable
    public func createAssociation(_ input: CreateAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssociationResult {
        try await self.client.execute(
            operation: "CreateAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A State Manager association defines the state that you want to maintain on your managed nodes. For example, an association can specify that anti-virus software must be installed and running on your managed nodes, or that certain ports must be closed. For static targets, the association specifies a schedule for when the configuration is reapplied. For dynamic targets, such as an Amazon Web Services resource group or an Amazon Web Services autoscaling group, State Manager, a tool in Amazon Web Services Systems Manager applies the configuration when new managed nodes are added to the group. The association also specifies actions to take when applying the configuration. For example, an association for anti-virus software might run once a day. If the software isn't installed, then State Manager installs it. If the software is installed, but the service isn't running, then the association might instruct State Manager to start the service.
    ///
    /// Parameters:
    ///   - alarmConfiguration: 
    ///   - applyOnlyAtCronInterval: By default, when you create a new association, the system runs it immediately after it is created and then according to the schedule you specified and when target changes are detected. Specify true for ApplyOnlyAtCronIntervalif you want the association to run only according to the schedule you specified. For more information, see Understanding when associations are applied to resources and >About target updates with Automation runbooks in the Amazon Web Services Systems Manager User Guide. This parameter isn't supported for rate expressions.
    ///   - associationName: Specify a descriptive name for the association.
    ///   - automationTargetParameterName: Choose the parameter that will define how your automation will branch out. This target is required for associations that use an Automation runbook and target resources by using rate controls. Automation is a tool in Amazon Web Services Systems Manager.
    ///   - calendarNames: The names of Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see Amazon Web Services Systems Manager Change Calendar in the Amazon Web Services Systems Manager User Guide.
    ///   - complianceSeverity: The severity level to assign to the association.
    ///   - documentVersion: The document version you want to associate with the targets. Can be a specific version or the default version.  State Manager doesn't support running associations that use a new version of a document if that document is shared from another account. State Manager always runs the default version of a document if shared from another account, even though the Systems Manager console shows that a new version was processed. If you want to run an association using a new version of a document shared form another account, you must set the document version to default.
    ///   - duration: The number of hours the association can run before it is canceled. Duration applies to associations that are currently running, and any pending and in progress commands on all targets. If a target was taken offline for the association to run, it is made available again immediately, without a reboot.  The Duration parameter applies only when both these conditions are true:   The association for which you specify a duration is cancelable according to the parameters of the SSM command document or Automation runbook associated with this execution.    The command specifies the  ApplyOnlyAtCronInterval parameter, which means that the association doesn't run immediately after it is created, but only according to the specified schedule.
    ///   - instanceId: The managed node ID.   InstanceId has been deprecated. To specify a managed node ID for an association, use the Targets parameter. Requests that include the parameter InstanceID with Systems Manager documents (SSM documents) that use schema version 2.0 or later will fail. In addition, if you use the parameter InstanceId, you can't use the parameters AssociationName, DocumentVersion, MaxErrors, MaxConcurrency, OutputLocation, or ScheduleExpression. To use these parameters, you must use the Targets parameter.
    ///   - maxConcurrency: The maximum number of targets allowed to run the association at the same time. You can specify a number, for example 10, or a percentage of the target set, for example 10%. The default value is 100%, which means all targets run the association at the same time. If a new managed node starts and attempts to run an association while Systems Manager is running MaxConcurrency associations, the association is allowed to run. During the next association interval, the new managed node will process its association within the limit specified for MaxConcurrency.
    ///   - maxErrors: The number of errors that are allowed before the system stops sending requests to run the association on additional targets. You can specify either an absolute number of errors, for example 10, or a percentage of the target set, for example 10%. If you specify 3, for example, the system stops sending requests when the fourth error is received. If you specify 0, then the system stops sending requests after the first error is returned. If you run an association on 50 managed nodes and set MaxError to 10%, then the system stops sending the request when the sixth error is received. Executions that are already running an association when MaxErrors is reached are allowed to complete, but some of these executions may fail as well. If you need to ensure that there won't be more than max-errors failed executions, set MaxConcurrency to 1 so that executions proceed one at a time.
    ///   - name: The name of the SSM Command document or Automation runbook that contains the configuration information for the managed node. You can specify Amazon Web Services-predefined documents, documents you created, or a document that is shared with you from another Amazon Web Services account. For Systems Manager documents (SSM documents) that are shared with you from other Amazon Web Services accounts, you must specify the complete SSM document ARN, in the following format:  arn:partition:ssm:region:account-id:document/document-name   For example:  arn:aws:ssm:us-east-2:12345678912:document/My-Shared-Document  For Amazon Web Services-predefined documents and SSM documents you created in your account, you only need to specify the document name. For example, AWS-ApplyPatchBaseline or My-Document.
    ///   - outputLocation: An Amazon Simple Storage Service (Amazon S3) bucket where you want to store the output details of the request.
    ///   - parameters: The parameters for the runtime configuration of the document.
    ///   - scheduleExpression: A cron expression when the association will be applied to the targets.
    ///   - scheduleOffset: Number of days to wait after the scheduled day to run an association. For example, if you specified a cron schedule of cron(0 0 ? * THU#2 *), you could specify an offset of 3 to run the association each Sunday after the second Thursday of the month. For more information about cron schedules for associations, see Reference: Cron and rate expressions for Systems Manager in the Amazon Web Services Systems Manager User Guide.   To use offsets, you must specify the ApplyOnlyAtCronInterval parameter. This option tells the system not to run an association immediately after you create it.
    ///   - syncCompliance: The mode for generating association compliance. You can specify AUTO or MANUAL. In AUTO mode, the system uses the status of the association execution to determine the compliance status. If the association execution runs successfully, then the association is COMPLIANT. If the association execution doesn't run successfully, the association is NON-COMPLIANT. In MANUAL mode, you must specify the AssociationId as a parameter for the PutComplianceItems API operation. In this case, compliance data isn't managed by State Manager. It is managed by your direct call to the PutComplianceItems API operation. By default, all associations use AUTO mode.
    ///   - tags: Adds or overwrites one or more tags for a State Manager association. Tags are metadata that you can assign to your Amazon Web Services resources. Tags enable you to categorize your resources in different ways, for example, by purpose, owner, or environment. Each tag consists of a key and an optional value, both of which you define.
    ///   - targetLocations: A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to create an association in multiple Regions and multiple accounts.
    ///   - targetMaps: A key-value mapping of document parameters to target resources. Both Targets and TargetMaps can't be specified together.
    ///   - targets: The targets for the association. You can target managed nodes by using tags, Amazon Web Services resource groups, all managed nodes in an Amazon Web Services account, or individual managed node IDs. You can target all managed nodes in an Amazon Web Services account by specifying the InstanceIds key with a value of *. For more information about choosing targets for an association, see Understanding targets and rate controls in State Manager associations in the Amazon Web Services Systems Manager User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssociation(
        alarmConfiguration: AlarmConfiguration? = nil,
        applyOnlyAtCronInterval: Bool? = nil,
        associationName: String? = nil,
        automationTargetParameterName: String? = nil,
        calendarNames: [String]? = nil,
        complianceSeverity: AssociationComplianceSeverity? = nil,
        documentVersion: String? = nil,
        duration: Int? = nil,
        instanceId: String? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        name: String,
        outputLocation: InstanceAssociationOutputLocation? = nil,
        parameters: [String: [String]]? = nil,
        scheduleExpression: String? = nil,
        scheduleOffset: Int? = nil,
        syncCompliance: AssociationSyncCompliance? = nil,
        tags: [Tag]? = nil,
        targetLocations: [TargetLocation]? = nil,
        targetMaps: [[String: [String]]]? = nil,
        targets: [Target]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssociationResult {
        let input = CreateAssociationRequest(
            alarmConfiguration: alarmConfiguration, 
            applyOnlyAtCronInterval: applyOnlyAtCronInterval, 
            associationName: associationName, 
            automationTargetParameterName: automationTargetParameterName, 
            calendarNames: calendarNames, 
            complianceSeverity: complianceSeverity, 
            documentVersion: documentVersion, 
            duration: duration, 
            instanceId: instanceId, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            name: name, 
            outputLocation: outputLocation, 
            parameters: parameters, 
            scheduleExpression: scheduleExpression, 
            scheduleOffset: scheduleOffset, 
            syncCompliance: syncCompliance, 
            tags: tags, 
            targetLocations: targetLocations, 
            targetMaps: targetMaps, 
            targets: targets
        )
        return try await self.createAssociation(input, logger: logger)
    }

    /// Associates the specified Amazon Web Services Systems Manager document (SSM document) with the specified managed nodes or targets. When you associate a document with one or more managed nodes using IDs or tags, Amazon Web Services Systems Manager Agent (SSM Agent) running on the managed node processes the document and configures the node as specified. If you associate a document with a managed node that already has an associated document, the system returns the AssociationAlreadyExists exception.
    @Sendable
    @inlinable
    public func createAssociationBatch(_ input: CreateAssociationBatchRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAssociationBatchResult {
        try await self.client.execute(
            operation: "CreateAssociationBatch", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates the specified Amazon Web Services Systems Manager document (SSM document) with the specified managed nodes or targets. When you associate a document with one or more managed nodes using IDs or tags, Amazon Web Services Systems Manager Agent (SSM Agent) running on the managed node processes the document and configures the node as specified. If you associate a document with a managed node that already has an associated document, the system returns the AssociationAlreadyExists exception.
    ///
    /// Parameters:
    ///   - entries: One or more associations.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAssociationBatch(
        entries: [CreateAssociationBatchRequestEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAssociationBatchResult {
        let input = CreateAssociationBatchRequest(
            entries: entries
        )
        return try await self.createAssociationBatch(input, logger: logger)
    }

    /// Creates a Amazon Web Services Systems Manager (SSM document). An SSM document defines the actions that Systems Manager performs on your managed nodes. For more information about SSM documents, including information about supported schemas, features, and syntax, see Amazon Web Services Systems Manager Documents in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func createDocument(_ input: CreateDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDocumentResult {
        try await self.client.execute(
            operation: "CreateDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Amazon Web Services Systems Manager (SSM document). An SSM document defines the actions that Systems Manager performs on your managed nodes. For more information about SSM documents, including information about supported schemas, features, and syntax, see Amazon Web Services Systems Manager Documents in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - attachments: A list of key-value pairs that describe attachments to a version of a document.
    ///   - content: The content for the new SSM document in JSON or YAML format. The content of the document must not exceed 64KB. This quota also includes the content specified for input parameters at runtime. We recommend storing the contents for your new document in an external JSON or YAML file and referencing the file in a command. For examples, see the following topics in the Amazon Web Services Systems Manager User Guide.    Create an SSM document (console)     Create an SSM document (command line)     Create an SSM document (API)
    ///   - displayName: An optional field where you can specify a friendly name for the SSM document. This value can differ for each version of the document. You can update this value at a later time using the UpdateDocument operation.
    ///   - documentFormat: Specify the document format for the request. The document format can be JSON, YAML, or TEXT. JSON is the default format.
    ///   - documentType: The type of document to create.  The DeploymentStrategy document type is an internal-use-only document type reserved for AppConfig.
    ///   - name: A name for the SSM document.  You can't use the following strings as document name prefixes. These are reserved by Amazon Web Services for use as document name prefixes:    aws     amazon     amzn     AWSEC2     AWSConfigRemediation     AWSSupport
    ///   - requires: A list of SSM documents required by a document. This parameter is used exclusively by AppConfig. When a user creates an AppConfig configuration in an SSM document, the user must also specify a required document for validation purposes. In this case, an ApplicationConfiguration document requires an ApplicationConfigurationSchema document for validation purposes. For more information, see What is AppConfig? in the AppConfig User Guide.
    ///   - tags: Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag an SSM document to identify the types of targets or the environment where it will run. In this case, you could specify the following key-value pairs:    Key=OS,Value=Windows     Key=Environment,Value=Production     To add tags to an existing SSM document, use the AddTagsToResource operation.
    ///   - targetType: Specify a target type to define the kinds of resources the document can run on. For example, to run a document on EC2 instances, specify the following value: /AWS::EC2::Instance. If you specify a value of '/' the document can run on all types of resources. If you don't specify a value, the document can't run on any resources. For a list of valid resource types, see Amazon Web Services resource and property types reference in the CloudFormation User Guide.
    ///   - versionName: An optional field specifying the version of the artifact you are creating with the document. For example, Release12.1. This value is unique across all versions of a document, and can't be changed.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDocument(
        attachments: [AttachmentsSource]? = nil,
        content: String,
        displayName: String? = nil,
        documentFormat: DocumentFormat? = nil,
        documentType: DocumentType? = nil,
        name: String,
        requires: [DocumentRequires]? = nil,
        tags: [Tag]? = nil,
        targetType: String? = nil,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDocumentResult {
        let input = CreateDocumentRequest(
            attachments: attachments, 
            content: content, 
            displayName: displayName, 
            documentFormat: documentFormat, 
            documentType: documentType, 
            name: name, 
            requires: requires, 
            tags: tags, 
            targetType: targetType, 
            versionName: versionName
        )
        return try await self.createDocument(input, logger: logger)
    }

    /// Creates a new maintenance window.  The value you specify for Duration determines the specific end time for the maintenance window based on the time it begins. No maintenance window tasks are permitted to start after the resulting endtime minus the number of hours you specify for Cutoff. For example, if the maintenance window starts at 3 PM, the duration is three hours, and the value you specify for Cutoff is one hour, no maintenance window tasks can start after 5 PM.
    @Sendable
    @inlinable
    public func createMaintenanceWindow(_ input: CreateMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateMaintenanceWindowResult {
        try await self.client.execute(
            operation: "CreateMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new maintenance window.  The value you specify for Duration determines the specific end time for the maintenance window based on the time it begins. No maintenance window tasks are permitted to start after the resulting endtime minus the number of hours you specify for Cutoff. For example, if the maintenance window starts at 3 PM, the duration is three hours, and the value you specify for Cutoff is one hour, no maintenance window tasks can start after 5 PM.
    ///
    /// Parameters:
    ///   - allowUnassociatedTargets: Enables a maintenance window task to run on managed nodes, even if you haven't registered those nodes as targets. If enabled, then you must specify the unregistered managed nodes (by node ID) when you register a task with the maintenance window. If you don't enable this option, then you must specify previously-registered targets when you register a task with the maintenance window.
    ///   - clientToken: User-provided idempotency token.
    ///   - cutoff: The number of hours before the end of the maintenance window that Amazon Web Services Systems Manager stops scheduling new tasks for execution.
    ///   - description: An optional description for the maintenance window. We recommend specifying a description to help you organize your maintenance windows.
    ///   - duration: The duration of the maintenance window in hours.
    ///   - endDate: The date and time, in ISO-8601 Extended format, for when you want the maintenance window to become inactive. EndDate allows you to set a date and time in the future when the maintenance window will no longer run.
    ///   - name: The name of the maintenance window.
    ///   - schedule: The schedule of the maintenance window in the form of a cron or rate expression.
    ///   - scheduleOffset: The number of days to wait after the date and time specified by a cron expression before running the maintenance window. For example, the following cron expression schedules a maintenance window to run on the third Tuesday of every month at 11:30 PM.  cron(30 23 ? * TUE#3 *)  If the schedule offset is 2, the maintenance window won't run until two days later.
    ///   - scheduleTimezone: The time zone that the scheduled maintenance window executions are based on, in Internet Assigned Numbers Authority (IANA) format. For example: "America/Los_Angeles", "UTC", or "Asia/Seoul". For more information, see the Time Zone Database on the IANA website.
    ///   - startDate: The date and time, in ISO-8601 Extended format, for when you want the maintenance window to become active. StartDate allows you to delay activation of the maintenance window until the specified future date.  When using a rate schedule, if you provide a start date that occurs in the past, the current date and time are used as the start date.
    ///   - tags: Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a maintenance window to identify the type of tasks it will run, the types of targets, and the environment it will run in. In this case, you could specify the following key-value pairs:    Key=TaskType,Value=AgentUpdate     Key=OS,Value=Windows     Key=Environment,Value=Production     To add tags to an existing maintenance window, use the AddTagsToResource operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func createMaintenanceWindow(
        allowUnassociatedTargets: Bool = false,
        clientToken: String? = CreateMaintenanceWindowRequest.idempotencyToken(),
        cutoff: Int = 0,
        description: String? = nil,
        duration: Int,
        endDate: String? = nil,
        name: String,
        schedule: String,
        scheduleOffset: Int? = nil,
        scheduleTimezone: String? = nil,
        startDate: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateMaintenanceWindowResult {
        let input = CreateMaintenanceWindowRequest(
            allowUnassociatedTargets: allowUnassociatedTargets, 
            clientToken: clientToken, 
            cutoff: cutoff, 
            description: description, 
            duration: duration, 
            endDate: endDate, 
            name: name, 
            schedule: schedule, 
            scheduleOffset: scheduleOffset, 
            scheduleTimezone: scheduleTimezone, 
            startDate: startDate, 
            tags: tags
        )
        return try await self.createMaintenanceWindow(input, logger: logger)
    }

    /// Creates a new OpsItem. You must have permission in Identity and Access Management (IAM) to create a new OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func createOpsItem(_ input: CreateOpsItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateOpsItemResponse {
        try await self.client.execute(
            operation: "CreateOpsItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new OpsItem. You must have permission in Identity and Access Management (IAM) to create a new OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - accountId: The target Amazon Web Services account where you want to create an OpsItem. To make this call, your account must be configured to work with OpsItems across accounts. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide.
    ///   - actualEndTime: The time a runbook workflow ended. Currently reported only for the OpsItem type /aws/changerequest.
    ///   - actualStartTime: The time a runbook workflow started. Currently reported only for the OpsItem type /aws/changerequest.
    ///   - category: Specify a category to assign to an OpsItem.
    ///   - description: User-defined text that contains information about the OpsItem, in Markdown format.   Provide enough information so that users viewing this OpsItem for the first time understand the issue.
    ///   - notifications: The Amazon Resource Name (ARN) of an SNS topic where notifications are sent when this OpsItem is edited or changed.
    ///   - operationalData: Operational data is custom data that provides useful reference details about the OpsItem. For example, you can specify log files, error strings, license keys, troubleshooting tips, or other relevant data. You enter operational data as key-value pairs. The key has a maximum length of 128 characters. The value has a maximum size of 20 KB.  Operational data keys can't begin with the following: amazon, aws, amzn, ssm, /amazon, /aws, /amzn, /ssm.  You can choose to make the data searchable by other users in the account or you can restrict search access. Searchable data means that all users with access to the OpsItem Overview page (as provided by the DescribeOpsItems API operation) can view and search on the specified data. Operational data that isn't searchable is only viewable by users who have access to the OpsItem (as provided by the GetOpsItem API operation). Use the /aws/resources key in OperationalData to specify a related resource in the request. Use the /aws/automations key in OperationalData to associate an Automation runbook with the OpsItem. To view Amazon Web Services CLI example commands that use these keys, see Create OpsItems manually in the Amazon Web Services Systems Manager User Guide.
    ///   - opsItemType: The type of OpsItem to create. Systems Manager supports the following types of OpsItems:    /aws/issue  This type of OpsItem is used for default OpsItems created by OpsCenter.     /aws/changerequest  This type of OpsItem is used by Change Manager for reviewing and approving or rejecting change requests.     /aws/insight  This type of OpsItem is used by OpsCenter for aggregating and reporting on duplicate OpsItems.
    ///   - plannedEndTime: The time specified in a change request for a runbook workflow to end. Currently supported only for the OpsItem type /aws/changerequest.
    ///   - plannedStartTime: The time specified in a change request for a runbook workflow to start. Currently supported only for the OpsItem type /aws/changerequest.
    ///   - priority: The importance of this OpsItem in relation to other OpsItems in the system.
    ///   - relatedOpsItems: One or more OpsItems that share something in common with the current OpsItems. For example, related OpsItems can include OpsItems with similar error messages, impacted resources, or statuses for the impacted resource.
    ///   - severity: Specify a severity to assign to an OpsItem.
    ///   - source: The origin of the OpsItem, such as Amazon EC2 or Systems Manager.  The source name can't contain the following strings: aws, amazon, and amzn.
    ///   - tags: Optional metadata that you assign to a resource. Tags use a key-value pair. For example:  Key=Department,Value=Finance   To add tags to a new OpsItem, a user must have IAM permissions for both the ssm:CreateOpsItems operation and the ssm:AddTagsToResource operation. To add tags to an existing OpsItem, use the AddTagsToResource operation.
    ///   - title: A short heading that describes the nature of the OpsItem and the impacted resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createOpsItem(
        accountId: String? = nil,
        actualEndTime: Date? = nil,
        actualStartTime: Date? = nil,
        category: String? = nil,
        description: String,
        notifications: [OpsItemNotification]? = nil,
        operationalData: [String: OpsItemDataValue]? = nil,
        opsItemType: String? = nil,
        plannedEndTime: Date? = nil,
        plannedStartTime: Date? = nil,
        priority: Int? = nil,
        relatedOpsItems: [RelatedOpsItem]? = nil,
        severity: String? = nil,
        source: String,
        tags: [Tag]? = nil,
        title: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateOpsItemResponse {
        let input = CreateOpsItemRequest(
            accountId: accountId, 
            actualEndTime: actualEndTime, 
            actualStartTime: actualStartTime, 
            category: category, 
            description: description, 
            notifications: notifications, 
            operationalData: operationalData, 
            opsItemType: opsItemType, 
            plannedEndTime: plannedEndTime, 
            plannedStartTime: plannedStartTime, 
            priority: priority, 
            relatedOpsItems: relatedOpsItems, 
            severity: severity, 
            source: source, 
            tags: tags, 
            title: title
        )
        return try await self.createOpsItem(input, logger: logger)
    }

    /// If you create a new application in Application Manager, Amazon Web Services Systems Manager calls this API operation to specify information about the new application, including the application type.
    @Sendable
    @inlinable
    public func createOpsMetadata(_ input: CreateOpsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateOpsMetadataResult {
        try await self.client.execute(
            operation: "CreateOpsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// If you create a new application in Application Manager, Amazon Web Services Systems Manager calls this API operation to specify information about the new application, including the application type.
    ///
    /// Parameters:
    ///   - metadata: Metadata for a new Application Manager application.
    ///   - resourceId: A resource ID for a new Application Manager application.
    ///   - tags: Optional metadata that you assign to a resource. You can specify a maximum of five tags for an OpsMetadata object. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag an OpsMetadata object to identify an environment or target Amazon Web Services Region. In this case, you could specify the following key-value pairs:    Key=Environment,Value=Production     Key=Region,Value=us-east-2
    ///   - logger: Logger use during operation
    @inlinable
    public func createOpsMetadata(
        metadata: [String: MetadataValue]? = nil,
        resourceId: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateOpsMetadataResult {
        let input = CreateOpsMetadataRequest(
            metadata: metadata, 
            resourceId: resourceId, 
            tags: tags
        )
        return try await self.createOpsMetadata(input, logger: logger)
    }

    /// Creates a patch baseline.  For information about valid key-value pairs in PatchFilters for each supported operating system type, see PatchFilter.
    @Sendable
    @inlinable
    public func createPatchBaseline(_ input: CreatePatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePatchBaselineResult {
        try await self.client.execute(
            operation: "CreatePatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a patch baseline.  For information about valid key-value pairs in PatchFilters for each supported operating system type, see PatchFilter.
    ///
    /// Parameters:
    ///   - approvalRules: A set of rules used to include patches in the baseline.
    ///   - approvedPatches: A list of explicitly approved patches for the baseline. For information about accepted formats for lists of approved patches and rejected patches, see Package name formats for approved and rejected patch lists in the Amazon Web Services Systems Manager User Guide.
    ///   - approvedPatchesComplianceLevel: Defines the compliance level for approved patches. When an approved patch is reported as missing, this value describes the severity of the compliance violation. The default value is UNSPECIFIED.
    ///   - approvedPatchesEnableNonSecurity: Indicates whether the list of approved patches includes non-security updates that should be applied to the managed nodes. The default value is false. Applies to Linux managed nodes only.
    ///   - availableSecurityUpdatesComplianceStatus: Indicates the status you want to assign to security patches that are available but not approved because they don't meet the installation criteria specified in the patch baseline. Example scenario: Security patches that you might want installed can be skipped if you have specified a long period to wait after a patch is released before installation. If an update to the patch is released during your specified waiting period, the waiting period for installing the patch starts over. If the waiting period is too long, multiple versions of the patch could be released but never installed. Supported for Windows Server managed nodes only.
    ///   - clientToken: User-provided idempotency token.
    ///   - description: A description of the patch baseline.
    ///   - globalFilters: A set of global filters used to include patches in the baseline.  The GlobalFilters parameter can be configured only by using the CLI or an Amazon Web Services SDK. It can't be configured from the Patch Manager console, and its value isn't displayed in the console.
    ///   - name: The name of the patch baseline.
    ///   - operatingSystem: Defines the operating system the patch baseline applies to. The default value is WINDOWS.
    ///   - rejectedPatches: A list of explicitly rejected patches for the baseline. For information about accepted formats for lists of approved patches and rejected patches, see Package name formats for approved and rejected patch lists in the Amazon Web Services Systems Manager User Guide.
    ///   - rejectedPatchesAction: The action for Patch Manager to take on patches included in the RejectedPackages list.  ALLOW_AS_DEPENDENCY   Linux and macOS: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as INSTALLED_OTHER. This is the default action if no option is specified.  Windows Server: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as INSTALLED_OTHER. Any package not already installed on the node is skipped. This is the default action if no option is specified.  BLOCK   All OSs: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as INSTALLED_REJECTED.
    ///   - sources: Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.
    ///   - tags: Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a patch baseline to identify the severity level of patches it specifies and the operating system family it applies to. In this case, you could specify the following key-value pairs:    Key=PatchSeverity,Value=Critical     Key=OS,Value=Windows     To add tags to an existing patch baseline, use the AddTagsToResource operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func createPatchBaseline(
        approvalRules: PatchRuleGroup? = nil,
        approvedPatches: [String]? = nil,
        approvedPatchesComplianceLevel: PatchComplianceLevel? = nil,
        approvedPatchesEnableNonSecurity: Bool? = nil,
        availableSecurityUpdatesComplianceStatus: PatchComplianceStatus? = nil,
        clientToken: String? = CreatePatchBaselineRequest.idempotencyToken(),
        description: String? = nil,
        globalFilters: PatchFilterGroup? = nil,
        name: String,
        operatingSystem: OperatingSystem? = nil,
        rejectedPatches: [String]? = nil,
        rejectedPatchesAction: PatchAction? = nil,
        sources: [PatchSource]? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePatchBaselineResult {
        let input = CreatePatchBaselineRequest(
            approvalRules: approvalRules, 
            approvedPatches: approvedPatches, 
            approvedPatchesComplianceLevel: approvedPatchesComplianceLevel, 
            approvedPatchesEnableNonSecurity: approvedPatchesEnableNonSecurity, 
            availableSecurityUpdatesComplianceStatus: availableSecurityUpdatesComplianceStatus, 
            clientToken: clientToken, 
            description: description, 
            globalFilters: globalFilters, 
            name: name, 
            operatingSystem: operatingSystem, 
            rejectedPatches: rejectedPatches, 
            rejectedPatchesAction: rejectedPatchesAction, 
            sources: sources, 
            tags: tags
        )
        return try await self.createPatchBaseline(input, logger: logger)
    }

    /// A resource data sync helps you view data from multiple sources in a single location. Amazon Web Services Systems Manager offers two types of resource data sync: SyncToDestination and SyncFromSource. You can configure Systems Manager Inventory to use the SyncToDestination type to synchronize Inventory data from multiple Amazon Web Services Regions to a single Amazon Simple Storage Service (Amazon S3) bucket. For more information, see Creating a resource data sync for Inventory in the Amazon Web Services Systems Manager User Guide. You can configure Systems Manager Explorer to use the SyncFromSource type to synchronize operational work items (OpsItems) and operational data (OpsData) from multiple Amazon Web Services Regions to a single Amazon S3 bucket. This type can synchronize OpsItems and OpsData from multiple Amazon Web Services accounts and Amazon Web Services Regions or EntireOrganization by using Organizations. For more information, see Setting up Systems Manager Explorer to display data from multiple accounts and Regions in the Amazon Web Services Systems Manager User Guide. A resource data sync is an asynchronous operation that returns immediately. After a successful initial sync is completed, the system continuously syncs data. To check the status of a sync, use the ListResourceDataSync.  By default, data isn't encrypted in Amazon S3. We strongly recommend that you enable encryption in Amazon S3 to ensure secure data storage. We also recommend that you secure access to the Amazon S3 bucket by creating a restrictive bucket policy.
    @Sendable
    @inlinable
    public func createResourceDataSync(_ input: CreateResourceDataSyncRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateResourceDataSyncResult {
        try await self.client.execute(
            operation: "CreateResourceDataSync", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A resource data sync helps you view data from multiple sources in a single location. Amazon Web Services Systems Manager offers two types of resource data sync: SyncToDestination and SyncFromSource. You can configure Systems Manager Inventory to use the SyncToDestination type to synchronize Inventory data from multiple Amazon Web Services Regions to a single Amazon Simple Storage Service (Amazon S3) bucket. For more information, see Creating a resource data sync for Inventory in the Amazon Web Services Systems Manager User Guide. You can configure Systems Manager Explorer to use the SyncFromSource type to synchronize operational work items (OpsItems) and operational data (OpsData) from multiple Amazon Web Services Regions to a single Amazon S3 bucket. This type can synchronize OpsItems and OpsData from multiple Amazon Web Services accounts and Amazon Web Services Regions or EntireOrganization by using Organizations. For more information, see Setting up Systems Manager Explorer to display data from multiple accounts and Regions in the Amazon Web Services Systems Manager User Guide. A resource data sync is an asynchronous operation that returns immediately. After a successful initial sync is completed, the system continuously syncs data. To check the status of a sync, use the ListResourceDataSync.  By default, data isn't encrypted in Amazon S3. We strongly recommend that you enable encryption in Amazon S3 to ensure secure data storage. We also recommend that you secure access to the Amazon S3 bucket by creating a restrictive bucket policy.
    ///
    /// Parameters:
    ///   - s3Destination: Amazon S3 configuration details for the sync. This parameter is required if the SyncType value is SyncToDestination.
    ///   - syncName: A name for the configuration.
    ///   - syncSource: Specify information about the data sources to synchronize. This parameter is required if the SyncType value is SyncFromSource.
    ///   - syncType: Specify SyncToDestination to create a resource data sync that synchronizes data to an S3 bucket for Inventory. If you specify SyncToDestination, you must provide a value for S3Destination. Specify SyncFromSource to synchronize data from a single account and multiple Regions, or multiple Amazon Web Services accounts and Amazon Web Services Regions, as listed in Organizations for Explorer. If you specify SyncFromSource, you must provide a value for SyncSource. The default value is SyncToDestination.
    ///   - logger: Logger use during operation
    @inlinable
    public func createResourceDataSync(
        s3Destination: ResourceDataSyncS3Destination? = nil,
        syncName: String,
        syncSource: ResourceDataSyncSource? = nil,
        syncType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateResourceDataSyncResult {
        let input = CreateResourceDataSyncRequest(
            s3Destination: s3Destination, 
            syncName: syncName, 
            syncSource: syncSource, 
            syncType: syncType
        )
        return try await self.createResourceDataSync(input, logger: logger)
    }

    /// Deletes an activation. You aren't required to delete an activation. If you delete an activation, you can no longer use it to register additional managed nodes. Deleting an activation doesn't de-register managed nodes. You must manually de-register managed nodes.
    @Sendable
    @inlinable
    public func deleteActivation(_ input: DeleteActivationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteActivationResult {
        try await self.client.execute(
            operation: "DeleteActivation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an activation. You aren't required to delete an activation. If you delete an activation, you can no longer use it to register additional managed nodes. Deleting an activation doesn't de-register managed nodes. You must manually de-register managed nodes.
    ///
    /// Parameters:
    ///   - activationId: The ID of the activation that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteActivation(
        activationId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteActivationResult {
        let input = DeleteActivationRequest(
            activationId: activationId
        )
        return try await self.deleteActivation(input, logger: logger)
    }

    /// Disassociates the specified Amazon Web Services Systems Manager document (SSM document) from the specified managed node. If you created the association by using the Targets parameter, then you must delete the association by using the association ID. When you disassociate a document from a managed node, it doesn't change the configuration of the node. To change the configuration state of a managed node after you disassociate a document, you must create a new document with the desired configuration and associate it with the node.
    @Sendable
    @inlinable
    public func deleteAssociation(_ input: DeleteAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAssociationResult {
        try await self.client.execute(
            operation: "DeleteAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates the specified Amazon Web Services Systems Manager document (SSM document) from the specified managed node. If you created the association by using the Targets parameter, then you must delete the association by using the association ID. When you disassociate a document from a managed node, it doesn't change the configuration of the node. To change the configuration state of a managed node after you disassociate a document, you must create a new document with the desired configuration and associate it with the node.
    ///
    /// Parameters:
    ///   - associationId: The association ID that you want to delete.
    ///   - instanceId: The managed node ID.   InstanceId has been deprecated. To specify a managed node ID for an association, use the Targets parameter. Requests that include the parameter InstanceID with Systems Manager documents (SSM documents) that use schema version 2.0 or later will fail. In addition, if you use the parameter InstanceId, you can't use the parameters AssociationName, DocumentVersion, MaxErrors, MaxConcurrency, OutputLocation, or ScheduleExpression. To use these parameters, you must use the Targets parameter.
    ///   - name: The name of the SSM document.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAssociation(
        associationId: String? = nil,
        instanceId: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAssociationResult {
        let input = DeleteAssociationRequest(
            associationId: associationId, 
            instanceId: instanceId, 
            name: name
        )
        return try await self.deleteAssociation(input, logger: logger)
    }

    /// Deletes the Amazon Web Services Systems Manager document (SSM document) and all managed node associations to the document. Before you delete the document, we recommend that you use DeleteAssociation to disassociate all managed nodes that are associated with the document.
    @Sendable
    @inlinable
    public func deleteDocument(_ input: DeleteDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDocumentResult {
        try await self.client.execute(
            operation: "DeleteDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the Amazon Web Services Systems Manager document (SSM document) and all managed node associations to the document. Before you delete the document, we recommend that you use DeleteAssociation to disassociate all managed nodes that are associated with the document.
    ///
    /// Parameters:
    ///   - documentVersion: The version of the document that you want to delete. If not provided, all versions of the document are deleted.
    ///   - force: Some SSM document types require that you specify a Force flag before you can delete the document. For example, you must specify a Force flag to delete a document of type ApplicationConfigurationSchema. You can restrict access to the Force flag in an Identity and Access Management (IAM) policy.
    ///   - name: The name of the document.
    ///   - versionName: The version name of the document that you want to delete. If not provided, all versions of the document are deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocument(
        documentVersion: String? = nil,
        force: Bool? = nil,
        name: String,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDocumentResult {
        let input = DeleteDocumentRequest(
            documentVersion: documentVersion, 
            force: force, 
            name: name, 
            versionName: versionName
        )
        return try await self.deleteDocument(input, logger: logger)
    }

    /// Delete a custom inventory type or the data associated with a custom Inventory type. Deleting a custom inventory type is also referred to as deleting a custom inventory schema.
    @Sendable
    @inlinable
    public func deleteInventory(_ input: DeleteInventoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInventoryResult {
        try await self.client.execute(
            operation: "DeleteInventory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a custom inventory type or the data associated with a custom Inventory type. Deleting a custom inventory type is also referred to as deleting a custom inventory schema.
    ///
    /// Parameters:
    ///   - clientToken: User-provided idempotency token.
    ///   - dryRun: Use this option to view a summary of the deletion request without deleting any data or the data type. This option is useful when you only want to understand what will be deleted. Once you validate that the data to be deleted is what you intend to delete, you can run the same command without specifying the DryRun option.
    ///   - schemaDeleteOption: Use the SchemaDeleteOption to delete a custom inventory type (schema). If you don't choose this option, the system only deletes existing inventory data associated with the custom inventory type. Choose one of the following options: DisableSchema: If you choose this option, the system ignores all inventory data for the specified version, and any earlier versions. To enable this schema again, you must call the PutInventory operation for a version greater than the disabled version. DeleteSchema: This option deletes the specified custom type from the Inventory service. You can recreate the schema later, if you want.
    ///   - typeName: The name of the custom inventory type for which you want to delete either all previously collected data or the inventory type itself.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInventory(
        clientToken: String? = DeleteInventoryRequest.idempotencyToken(),
        dryRun: Bool? = nil,
        schemaDeleteOption: InventorySchemaDeleteOption? = nil,
        typeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInventoryResult {
        let input = DeleteInventoryRequest(
            clientToken: clientToken, 
            dryRun: dryRun, 
            schemaDeleteOption: schemaDeleteOption, 
            typeName: typeName
        )
        return try await self.deleteInventory(input, logger: logger)
    }

    /// Deletes a maintenance window.
    @Sendable
    @inlinable
    public func deleteMaintenanceWindow(_ input: DeleteMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteMaintenanceWindowResult {
        try await self.client.execute(
            operation: "DeleteMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a maintenance window.
    ///
    /// Parameters:
    ///   - windowId: The ID of the maintenance window to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteMaintenanceWindow(
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteMaintenanceWindowResult {
        let input = DeleteMaintenanceWindowRequest(
            windowId: windowId
        )
        return try await self.deleteMaintenanceWindow(input, logger: logger)
    }

    /// Delete an OpsItem. You must have permission in Identity and Access Management (IAM) to delete an OpsItem.   Note the following important information about this operation.   Deleting an OpsItem is irreversible. You can't restore a deleted OpsItem.   This operation uses an eventual consistency model, which means the system can take a few minutes to complete this operation. If you delete an OpsItem and immediately call, for example, GetOpsItem, the deleted OpsItem might still appear in the response.    This operation is idempotent. The system doesn't throw an exception if you repeatedly call this operation for the same OpsItem. If the first call is successful, all additional calls return the same successful response as the first call.   This operation doesn't support cross-account calls. A delegated administrator or management account can't delete OpsItems in other accounts, even if OpsCenter has been set up for cross-account administration. For more information about cross-account administration, see Setting up OpsCenter to centrally manage OpsItems across accounts in the Systems Manager User Guide.
    @Sendable
    @inlinable
    public func deleteOpsItem(_ input: DeleteOpsItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOpsItemResponse {
        try await self.client.execute(
            operation: "DeleteOpsItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete an OpsItem. You must have permission in Identity and Access Management (IAM) to delete an OpsItem.   Note the following important information about this operation.   Deleting an OpsItem is irreversible. You can't restore a deleted OpsItem.   This operation uses an eventual consistency model, which means the system can take a few minutes to complete this operation. If you delete an OpsItem and immediately call, for example, GetOpsItem, the deleted OpsItem might still appear in the response.    This operation is idempotent. The system doesn't throw an exception if you repeatedly call this operation for the same OpsItem. If the first call is successful, all additional calls return the same successful response as the first call.   This operation doesn't support cross-account calls. A delegated administrator or management account can't delete OpsItems in other accounts, even if OpsCenter has been set up for cross-account administration. For more information about cross-account administration, see Setting up OpsCenter to centrally manage OpsItems across accounts in the Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - opsItemId: The ID of the OpsItem that you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOpsItem(
        opsItemId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOpsItemResponse {
        let input = DeleteOpsItemRequest(
            opsItemId: opsItemId
        )
        return try await self.deleteOpsItem(input, logger: logger)
    }

    /// Delete OpsMetadata related to an application.
    @Sendable
    @inlinable
    public func deleteOpsMetadata(_ input: DeleteOpsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteOpsMetadataResult {
        try await self.client.execute(
            operation: "DeleteOpsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete OpsMetadata related to an application.
    ///
    /// Parameters:
    ///   - opsMetadataArn: The Amazon Resource Name (ARN) of an OpsMetadata Object to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteOpsMetadata(
        opsMetadataArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteOpsMetadataResult {
        let input = DeleteOpsMetadataRequest(
            opsMetadataArn: opsMetadataArn
        )
        return try await self.deleteOpsMetadata(input, logger: logger)
    }

    /// Delete a parameter from the system. After deleting a parameter, wait for at least 30 seconds to create a parameter with the same name.
    @Sendable
    @inlinable
    public func deleteParameter(_ input: DeleteParameterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteParameterResult {
        try await self.client.execute(
            operation: "DeleteParameter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a parameter from the system. After deleting a parameter, wait for at least 30 seconds to create a parameter with the same name.
    ///
    /// Parameters:
    ///   - name: The name of the parameter to delete.  You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteParameter(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteParameterResult {
        let input = DeleteParameterRequest(
            name: name
        )
        return try await self.deleteParameter(input, logger: logger)
    }

    /// Delete a list of parameters. After deleting a parameter, wait for at least 30 seconds to create a parameter with the same name.
    @Sendable
    @inlinable
    public func deleteParameters(_ input: DeleteParametersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteParametersResult {
        try await self.client.execute(
            operation: "DeleteParameters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Delete a list of parameters. After deleting a parameter, wait for at least 30 seconds to create a parameter with the same name.
    ///
    /// Parameters:
    ///   - names: The names of the parameters to delete. After deleting a parameter, wait for at least 30 seconds to create a parameter with the same name.  You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteParameters(
        names: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteParametersResult {
        let input = DeleteParametersRequest(
            names: names
        )
        return try await self.deleteParameters(input, logger: logger)
    }

    /// Deletes a patch baseline.
    @Sendable
    @inlinable
    public func deletePatchBaseline(_ input: DeletePatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePatchBaselineResult {
        try await self.client.execute(
            operation: "DeletePatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a patch baseline.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePatchBaseline(
        baselineId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePatchBaselineResult {
        let input = DeletePatchBaselineRequest(
            baselineId: baselineId
        )
        return try await self.deletePatchBaseline(input, logger: logger)
    }

    /// Deletes a resource data sync configuration. After the configuration is deleted, changes to data on managed nodes are no longer synced to or from the target. Deleting a sync configuration doesn't delete data.
    @Sendable
    @inlinable
    public func deleteResourceDataSync(_ input: DeleteResourceDataSyncRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteResourceDataSyncResult {
        try await self.client.execute(
            operation: "DeleteResourceDataSync", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a resource data sync configuration. After the configuration is deleted, changes to data on managed nodes are no longer synced to or from the target. Deleting a sync configuration doesn't delete data.
    ///
    /// Parameters:
    ///   - syncName: The name of the configuration to delete.
    ///   - syncType: Specify the type of resource data sync to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResourceDataSync(
        syncName: String,
        syncType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteResourceDataSyncResult {
        let input = DeleteResourceDataSyncRequest(
            syncName: syncName, 
            syncType: syncType
        )
        return try await self.deleteResourceDataSync(input, logger: logger)
    }

    /// Deletes a Systems Manager resource policy. A resource policy helps you to define the IAM entity (for example, an Amazon Web Services account) that can manage your Systems Manager resources. The following resources support Systems Manager resource policies.    OpsItemGroup - The resource policy for OpsItemGroup enables Amazon Web Services accounts to view and interact with OpsCenter operational work items (OpsItems).    Parameter - The resource policy is used to share a parameter with other accounts using Resource Access Manager (RAM). For more information about cross-account sharing of parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func deleteResourcePolicy(_ input: DeleteResourcePolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteResourcePolicyResponse {
        try await self.client.execute(
            operation: "DeleteResourcePolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Systems Manager resource policy. A resource policy helps you to define the IAM entity (for example, an Amazon Web Services account) that can manage your Systems Manager resources. The following resources support Systems Manager resource policies.    OpsItemGroup - The resource policy for OpsItemGroup enables Amazon Web Services accounts to view and interact with OpsCenter operational work items (OpsItems).    Parameter - The resource policy is used to share a parameter with other accounts using Resource Access Manager (RAM). For more information about cross-account sharing of parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - policyHash: ID of the current policy version. The hash helps to prevent multiple calls from attempting to overwrite a policy.
    ///   - policyId: The policy ID.
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource to which the policies are attached.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResourcePolicy(
        policyHash: String,
        policyId: String,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteResourcePolicyResponse {
        let input = DeleteResourcePolicyRequest(
            policyHash: policyHash, 
            policyId: policyId, 
            resourceArn: resourceArn
        )
        return try await self.deleteResourcePolicy(input, logger: logger)
    }

    /// Removes the server or virtual machine from the list of registered servers. If you want to reregister an on-premises server, edge device, or VM, you must use a different Activation Code and Activation ID than used to register the machine previously. The Activation Code and Activation ID must not have already been used on the maximum number of activations specified when they were created. For more information, see Deregistering managed nodes in a hybrid and multicloud environment in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func deregisterManagedInstance(_ input: DeregisterManagedInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterManagedInstanceResult {
        try await self.client.execute(
            operation: "DeregisterManagedInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the server or virtual machine from the list of registered servers. If you want to reregister an on-premises server, edge device, or VM, you must use a different Activation Code and Activation ID than used to register the machine previously. The Activation Code and Activation ID must not have already been used on the maximum number of activations specified when they were created. For more information, see Deregistering managed nodes in a hybrid and multicloud environment in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - instanceId: The ID assigned to the managed node when you registered it using the activation process.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterManagedInstance(
        instanceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterManagedInstanceResult {
        let input = DeregisterManagedInstanceRequest(
            instanceId: instanceId
        )
        return try await self.deregisterManagedInstance(input, logger: logger)
    }

    /// Removes a patch group from a patch baseline.
    @Sendable
    @inlinable
    public func deregisterPatchBaselineForPatchGroup(_ input: DeregisterPatchBaselineForPatchGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterPatchBaselineForPatchGroupResult {
        try await self.client.execute(
            operation: "DeregisterPatchBaselineForPatchGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a patch group from a patch baseline.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline to deregister the patch group from.
    ///   - patchGroup: The name of the patch group that should be deregistered from the patch baseline.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterPatchBaselineForPatchGroup(
        baselineId: String,
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterPatchBaselineForPatchGroupResult {
        let input = DeregisterPatchBaselineForPatchGroupRequest(
            baselineId: baselineId, 
            patchGroup: patchGroup
        )
        return try await self.deregisterPatchBaselineForPatchGroup(input, logger: logger)
    }

    /// Removes a target from a maintenance window.
    @Sendable
    @inlinable
    public func deregisterTargetFromMaintenanceWindow(_ input: DeregisterTargetFromMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterTargetFromMaintenanceWindowResult {
        try await self.client.execute(
            operation: "DeregisterTargetFromMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a target from a maintenance window.
    ///
    /// Parameters:
    ///   - safe: The system checks if the target is being referenced by a task. If the target is being referenced, the system returns an error and doesn't deregister the target from the maintenance window.
    ///   - windowId: The ID of the maintenance window the target should be removed from.
    ///   - windowTargetId: The ID of the target definition to remove.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterTargetFromMaintenanceWindow(
        safe: Bool? = nil,
        windowId: String,
        windowTargetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterTargetFromMaintenanceWindowResult {
        let input = DeregisterTargetFromMaintenanceWindowRequest(
            safe: safe, 
            windowId: windowId, 
            windowTargetId: windowTargetId
        )
        return try await self.deregisterTargetFromMaintenanceWindow(input, logger: logger)
    }

    /// Removes a task from a maintenance window.
    @Sendable
    @inlinable
    public func deregisterTaskFromMaintenanceWindow(_ input: DeregisterTaskFromMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeregisterTaskFromMaintenanceWindowResult {
        try await self.client.execute(
            operation: "DeregisterTaskFromMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a task from a maintenance window.
    ///
    /// Parameters:
    ///   - windowId: The ID of the maintenance window the task should be removed from.
    ///   - windowTaskId: The ID of the task to remove from the maintenance window.
    ///   - logger: Logger use during operation
    @inlinable
    public func deregisterTaskFromMaintenanceWindow(
        windowId: String,
        windowTaskId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeregisterTaskFromMaintenanceWindowResult {
        let input = DeregisterTaskFromMaintenanceWindowRequest(
            windowId: windowId, 
            windowTaskId: windowTaskId
        )
        return try await self.deregisterTaskFromMaintenanceWindow(input, logger: logger)
    }

    /// Describes details about the activation, such as the date and time the activation was created, its expiration date, the Identity and Access Management (IAM) role assigned to the managed nodes in the activation, and the number of nodes registered by using this activation.
    @Sendable
    @inlinable
    public func describeActivations(_ input: DescribeActivationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeActivationsResult {
        try await self.client.execute(
            operation: "DescribeActivations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes details about the activation, such as the date and time the activation was created, its expiration date, the Identity and Access Management (IAM) role assigned to the managed nodes in the activation, and the number of nodes registered by using this activation.
    ///
    /// Parameters:
    ///   - filters: A filter to view information about your activations.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeActivations(
        filters: [DescribeActivationsFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeActivationsResult {
        let input = DescribeActivationsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeActivations(input, logger: logger)
    }

    /// Describes the association for the specified target or managed node. If you created the association by using the Targets parameter, then you must retrieve the association by using the association ID.
    @Sendable
    @inlinable
    public func describeAssociation(_ input: DescribeAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssociationResult {
        try await self.client.execute(
            operation: "DescribeAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the association for the specified target or managed node. If you created the association by using the Targets parameter, then you must retrieve the association by using the association ID.
    ///
    /// Parameters:
    ///   - associationId: The association ID for which you want information.
    ///   - associationVersion: Specify the association version to retrieve. To view the latest version, either specify $LATEST for this parameter, or omit this parameter. To view a list of all associations for a managed node, use ListAssociations. To get a list of versions for a specific association, use ListAssociationVersions.
    ///   - instanceId: The managed node ID.
    ///   - name: The name of the SSM document.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssociation(
        associationId: String? = nil,
        associationVersion: String? = nil,
        instanceId: String? = nil,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssociationResult {
        let input = DescribeAssociationRequest(
            associationId: associationId, 
            associationVersion: associationVersion, 
            instanceId: instanceId, 
            name: name
        )
        return try await self.describeAssociation(input, logger: logger)
    }

    /// Views information about a specific execution of a specific association.
    @Sendable
    @inlinable
    public func describeAssociationExecutionTargets(_ input: DescribeAssociationExecutionTargetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssociationExecutionTargetsResult {
        try await self.client.execute(
            operation: "DescribeAssociationExecutionTargets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Views information about a specific execution of a specific association.
    ///
    /// Parameters:
    ///   - associationId: The association ID that includes the execution for which you want to view details.
    ///   - executionId: The execution ID for which you want to view details.
    ///   - filters: Filters for the request. You can specify the following filters and values. Status (EQUAL) ResourceId (EQUAL) ResourceType (EQUAL)
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssociationExecutionTargets(
        associationId: String,
        executionId: String,
        filters: [AssociationExecutionTargetsFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssociationExecutionTargetsResult {
        let input = DescribeAssociationExecutionTargetsRequest(
            associationId: associationId, 
            executionId: executionId, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeAssociationExecutionTargets(input, logger: logger)
    }

    /// Views all executions for a specific association ID.
    @Sendable
    @inlinable
    public func describeAssociationExecutions(_ input: DescribeAssociationExecutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAssociationExecutionsResult {
        try await self.client.execute(
            operation: "DescribeAssociationExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Views all executions for a specific association ID.
    ///
    /// Parameters:
    ///   - associationId: The association ID for which you want to view execution history details.
    ///   - filters: Filters for the request. You can specify the following filters and values. ExecutionId (EQUAL) Status (EQUAL) CreatedTime (EQUAL, GREATER_THAN, LESS_THAN)
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAssociationExecutions(
        associationId: String,
        filters: [AssociationExecutionFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAssociationExecutionsResult {
        let input = DescribeAssociationExecutionsRequest(
            associationId: associationId, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeAssociationExecutions(input, logger: logger)
    }

    /// Provides details about all active and terminated Automation executions.
    @Sendable
    @inlinable
    public func describeAutomationExecutions(_ input: DescribeAutomationExecutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAutomationExecutionsResult {
        try await self.client.execute(
            operation: "DescribeAutomationExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides details about all active and terminated Automation executions.
    ///
    /// Parameters:
    ///   - filters: Filters used to limit the scope of executions that are requested.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAutomationExecutions(
        filters: [AutomationExecutionFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAutomationExecutionsResult {
        let input = DescribeAutomationExecutionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeAutomationExecutions(input, logger: logger)
    }

    /// Information about all active and terminated step executions in an Automation workflow.
    @Sendable
    @inlinable
    public func describeAutomationStepExecutions(_ input: DescribeAutomationStepExecutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAutomationStepExecutionsResult {
        try await self.client.execute(
            operation: "DescribeAutomationStepExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Information about all active and terminated step executions in an Automation workflow.
    ///
    /// Parameters:
    ///   - automationExecutionId: The Automation execution ID for which you want step execution descriptions.
    ///   - filters: One or more filters to limit the number of step executions returned by the request.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - reverseOrder: Indicates whether to list step executions in reverse order by start time. The default value is 'false'.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAutomationStepExecutions(
        automationExecutionId: String,
        filters: [StepExecutionFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        reverseOrder: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAutomationStepExecutionsResult {
        let input = DescribeAutomationStepExecutionsRequest(
            automationExecutionId: automationExecutionId, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            reverseOrder: reverseOrder
        )
        return try await self.describeAutomationStepExecutions(input, logger: logger)
    }

    /// Lists all patches eligible to be included in a patch baseline.  Currently, DescribeAvailablePatches supports only the Amazon Linux 1, Amazon Linux 2, and Windows Server operating systems.
    @Sendable
    @inlinable
    public func describeAvailablePatches(_ input: DescribeAvailablePatchesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAvailablePatchesResult {
        try await self.client.execute(
            operation: "DescribeAvailablePatches", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all patches eligible to be included in a patch baseline.  Currently, DescribeAvailablePatches supports only the Amazon Linux 1, Amazon Linux 2, and Windows Server operating systems.
    ///
    /// Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair.  Windows Server  Supported keys for Windows Server managed node patches include the following:     PATCH_SET   Sample values: OS | APPLICATION      PRODUCT   Sample values: WindowsServer2012 | Office 2010 | MicrosoftDefenderAntivirus      PRODUCT_FAMILY   Sample values: Windows | Office      MSRC_SEVERITY   Sample values: ServicePacks | Important | Moderate      CLASSIFICATION   Sample values: ServicePacks | SecurityUpdates | DefinitionUpdates      PATCH_ID   Sample values: KB123456 | KB4516046     Linux   When specifying filters for Linux patches, you must specify a key-pair for PRODUCT. For example, using the Command Line Interface (CLI), the following command fails:  aws ssm describe-available-patches --filters Key=CVE_ID,Values=CVE-2018-3615  However, the following command succeeds:  aws ssm describe-available-patches --filters Key=PRODUCT,Values=AmazonLinux2018.03 Key=CVE_ID,Values=CVE-2018-3615   Supported keys for Linux managed node patches include the following:     PRODUCT   Sample values: AmazonLinux2018.03 | AmazonLinux2.0      NAME   Sample values: kernel-headers | samba-python | php      SEVERITY   Sample values: Critical | Important | Medium | Low      EPOCH   Sample values: 0 | 1      VERSION   Sample values: 78.6.1 | 4.10.16      RELEASE   Sample values: 9.56.amzn1 | 1.amzn2      ARCH   Sample values: i686 | x86_64      REPOSITORY   Sample values: Core | Updates      ADVISORY_ID   Sample values: ALAS-2018-1058 | ALAS2-2021-1594      CVE_ID   Sample values: CVE-2018-3615 | CVE-2020-1472      BUGZILLA_ID   Sample values: 1463241
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAvailablePatches(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAvailablePatchesResult {
        let input = DescribeAvailablePatchesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeAvailablePatches(input, logger: logger)
    }

    /// Describes the specified Amazon Web Services Systems Manager document (SSM document).
    @Sendable
    @inlinable
    public func describeDocument(_ input: DescribeDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDocumentResult {
        try await self.client.execute(
            operation: "DescribeDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the specified Amazon Web Services Systems Manager document (SSM document).
    ///
    /// Parameters:
    ///   - documentVersion: The document version for which you want information. Can be a specific version or the default version.
    ///   - name: The name of the SSM document.  If you're calling a shared SSM document from a different Amazon Web Services account, Name is the full Amazon Resource Name (ARN) of the document.
    ///   - versionName: An optional field specifying the version of the artifact associated with the document. For example, 12.6. This value is unique across all versions of a document, and can't be changed.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDocument(
        documentVersion: String? = nil,
        name: String,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDocumentResult {
        let input = DescribeDocumentRequest(
            documentVersion: documentVersion, 
            name: name, 
            versionName: versionName
        )
        return try await self.describeDocument(input, logger: logger)
    }

    /// Describes the permissions for a Amazon Web Services Systems Manager document (SSM document). If you created the document, you are the owner. If a document is shared, it can either be shared privately (by specifying a user's Amazon Web Services account ID) or publicly (All).
    @Sendable
    @inlinable
    public func describeDocumentPermission(_ input: DescribeDocumentPermissionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDocumentPermissionResponse {
        try await self.client.execute(
            operation: "DescribeDocumentPermission", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the permissions for a Amazon Web Services Systems Manager document (SSM document). If you created the document, you are the owner. If a document is shared, it can either be shared privately (by specifying a user's Amazon Web Services account ID) or publicly (All).
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - name: The name of the document for which you are the owner.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - permissionType: The permission type for the document. The permission type can be Share.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDocumentPermission(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        permissionType: DocumentPermissionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDocumentPermissionResponse {
        let input = DescribeDocumentPermissionRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            permissionType: permissionType
        )
        return try await self.describeDocumentPermission(input, logger: logger)
    }

    /// All associations for the managed nodes.
    @Sendable
    @inlinable
    public func describeEffectiveInstanceAssociations(_ input: DescribeEffectiveInstanceAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEffectiveInstanceAssociationsResult {
        try await self.client.execute(
            operation: "DescribeEffectiveInstanceAssociations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// All associations for the managed nodes.
    ///
    /// Parameters:
    ///   - instanceId: The managed node ID for which you want to view all associations.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEffectiveInstanceAssociations(
        instanceId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEffectiveInstanceAssociationsResult {
        let input = DescribeEffectiveInstanceAssociationsRequest(
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeEffectiveInstanceAssociations(input, logger: logger)
    }

    /// Retrieves the current effective patches (the patch and the approval state) for the specified patch baseline. Applies to patch baselines for Windows only.
    @Sendable
    @inlinable
    public func describeEffectivePatchesForPatchBaseline(_ input: DescribeEffectivePatchesForPatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEffectivePatchesForPatchBaselineResult {
        try await self.client.execute(
            operation: "DescribeEffectivePatchesForPatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the current effective patches (the patch and the approval state) for the specified patch baseline. Applies to patch baselines for Windows only.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline to retrieve the effective patches for.
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEffectivePatchesForPatchBaseline(
        baselineId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEffectivePatchesForPatchBaselineResult {
        let input = DescribeEffectivePatchesForPatchBaselineRequest(
            baselineId: baselineId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeEffectivePatchesForPatchBaseline(input, logger: logger)
    }

    /// The status of the associations for the managed nodes.
    @Sendable
    @inlinable
    public func describeInstanceAssociationsStatus(_ input: DescribeInstanceAssociationsStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstanceAssociationsStatusResult {
        try await self.client.execute(
            operation: "DescribeInstanceAssociationsStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// The status of the associations for the managed nodes.
    ///
    /// Parameters:
    ///   - instanceId: The managed node IDs for which you want association status information.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstanceAssociationsStatus(
        instanceId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstanceAssociationsStatusResult {
        let input = DescribeInstanceAssociationsStatusRequest(
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInstanceAssociationsStatus(input, logger: logger)
    }

    /// Provides information about one or more of your managed nodes, including the operating system platform, SSM Agent version, association status, and IP address. This operation does not return information for nodes that are either Stopped or Terminated. If you specify one or more node IDs, the operation returns information for those managed nodes. If you don't specify node IDs, it returns information for all your managed nodes. If you specify a node ID that isn't valid or a node that you don't own, you receive an error.  The IamRole field returned for this API operation is the role assigned to an Amazon EC2 instance configured with a Systems Manager Quick Setup host management configuration or the role assigned to an on-premises managed node.
    @Sendable
    @inlinable
    public func describeInstanceInformation(_ input: DescribeInstanceInformationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstanceInformationResult {
        try await self.client.execute(
            operation: "DescribeInstanceInformation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides information about one or more of your managed nodes, including the operating system platform, SSM Agent version, association status, and IP address. This operation does not return information for nodes that are either Stopped or Terminated. If you specify one or more node IDs, the operation returns information for those managed nodes. If you don't specify node IDs, it returns information for all your managed nodes. If you specify a node ID that isn't valid or a node that you don't own, you receive an error.  The IamRole field returned for this API operation is the role assigned to an Amazon EC2 instance configured with a Systems Manager Quick Setup host management configuration or the role assigned to an on-premises managed node.
    ///
    /// Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of managed nodes. You can filter based on tags applied to your managed nodes. Tag filters can't be combined with other filter types. Use this Filters data type instead of InstanceInformationFilterList, which is deprecated.
    ///   - instanceInformationFilterList: This is a legacy method. We recommend that you don't use this method. Instead, use the Filters data type. Filters enables you to return node information by filtering based on tags applied to managed nodes.  Attempting to use InstanceInformationFilterList and Filters leads to an exception error.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results. The default value is 10 items.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstanceInformation(
        filters: [InstanceInformationStringFilter]? = nil,
        instanceInformationFilterList: [InstanceInformationFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstanceInformationResult {
        let input = DescribeInstanceInformationRequest(
            filters: filters, 
            instanceInformationFilterList: instanceInformationFilterList, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInstanceInformation(input, logger: logger)
    }

    /// Retrieves the high-level patch state of one or more managed nodes.
    @Sendable
    @inlinable
    public func describeInstancePatchStates(_ input: DescribeInstancePatchStatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstancePatchStatesResult {
        try await self.client.execute(
            operation: "DescribeInstancePatchStates", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the high-level patch state of one or more managed nodes.
    ///
    /// Parameters:
    ///   - instanceIds: The ID of the managed node for which patch state information should be retrieved.
    ///   - maxResults: The maximum number of managed nodes to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstancePatchStates(
        instanceIds: [String],
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstancePatchStatesResult {
        let input = DescribeInstancePatchStatesRequest(
            instanceIds: instanceIds, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInstancePatchStates(input, logger: logger)
    }

    /// Retrieves the high-level patch state for the managed nodes in the specified patch group.
    @Sendable
    @inlinable
    public func describeInstancePatchStatesForPatchGroup(_ input: DescribeInstancePatchStatesForPatchGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstancePatchStatesForPatchGroupResult {
        try await self.client.execute(
            operation: "DescribeInstancePatchStatesForPatchGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the high-level patch state for the managed nodes in the specified patch group.
    ///
    /// Parameters:
    ///   - filters: Each entry in the array is a structure containing:   Key (string between 1 and 200 characters)   Values (array containing a single string)   Type (string "Equal", "NotEqual", "LessThan", "GreaterThan")
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - patchGroup: The name of the patch group for which the patch state information should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstancePatchStatesForPatchGroup(
        filters: [InstancePatchStateFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstancePatchStatesForPatchGroupResult {
        let input = DescribeInstancePatchStatesForPatchGroupRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            patchGroup: patchGroup
        )
        return try await self.describeInstancePatchStatesForPatchGroup(input, logger: logger)
    }

    /// Retrieves information about the patches on the specified managed node and their state relative to the patch baseline being used for the node.
    @Sendable
    @inlinable
    public func describeInstancePatches(_ input: DescribeInstancePatchesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstancePatchesResult {
        try await self.client.execute(
            operation: "DescribeInstancePatches", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about the patches on the specified managed node and their state relative to the patch baseline being used for the node.
    ///
    /// Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribeInstancePatchesinclude the following:     Classification   Sample values: Security | SecurityUpdates      KBId   Sample values: KB4480056 | java-1.7.0-openjdk.x86_64      Severity   Sample values: Important | Medium | Low      State   Sample values: Installed | InstalledOther | InstalledPendingReboot  For lists of all State values, see Patch compliance state values in the Amazon Web Services Systems Manager User Guide.
    ///   - instanceId: The ID of the managed node whose patch state information should be retrieved.
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstancePatches(
        filters: [PatchOrchestratorFilter]? = nil,
        instanceId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstancePatchesResult {
        let input = DescribeInstancePatchesRequest(
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInstancePatches(input, logger: logger)
    }

    /// An API operation used by the Systems Manager console to display information about Systems Manager managed nodes.
    @Sendable
    @inlinable
    public func describeInstanceProperties(_ input: DescribeInstancePropertiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstancePropertiesResult {
        try await self.client.execute(
            operation: "DescribeInstanceProperties", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// An API operation used by the Systems Manager console to display information about Systems Manager managed nodes.
    ///
    /// Parameters:
    ///   - filtersWithOperator: The request filters to use with the operator.
    ///   - instancePropertyFilterList: An array of instance property filters.
    ///   - maxResults: The maximum number of items to return for the call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token provided by a previous request to use to return the next set of properties.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstanceProperties(
        filtersWithOperator: [InstancePropertyStringFilter]? = nil,
        instancePropertyFilterList: [InstancePropertyFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstancePropertiesResult {
        let input = DescribeInstancePropertiesRequest(
            filtersWithOperator: filtersWithOperator, 
            instancePropertyFilterList: instancePropertyFilterList, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInstanceProperties(input, logger: logger)
    }

    /// Describes a specific delete inventory operation.
    @Sendable
    @inlinable
    public func describeInventoryDeletions(_ input: DescribeInventoryDeletionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInventoryDeletionsResult {
        try await self.client.execute(
            operation: "DescribeInventoryDeletions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes a specific delete inventory operation.
    ///
    /// Parameters:
    ///   - deletionId: Specify the delete inventory ID for which you want information. This ID was returned by the DeleteInventory operation.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInventoryDeletions(
        deletionId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInventoryDeletionsResult {
        let input = DescribeInventoryDeletionsRequest(
            deletionId: deletionId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeInventoryDeletions(input, logger: logger)
    }

    /// Retrieves the individual task executions (one per target) for a particular task run as part of a maintenance window execution.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowExecutionTaskInvocations(_ input: DescribeMaintenanceWindowExecutionTaskInvocationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowExecutionTaskInvocationsResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowExecutionTaskInvocations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the individual task executions (one per target) for a particular task run as part of a maintenance window execution.
    ///
    /// Parameters:
    ///   - filters: Optional filters used to scope down the returned task invocations. The supported filter key is STATUS with the corresponding values PENDING, IN_PROGRESS, SUCCESS, FAILED, TIMED_OUT, CANCELLING, and CANCELLED.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - taskId: The ID of the specific task in the maintenance window task that should be retrieved.
    ///   - windowExecutionId: The ID of the maintenance window execution the task is part of.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowExecutionTaskInvocations(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        taskId: String,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowExecutionTaskInvocationsResult {
        let input = DescribeMaintenanceWindowExecutionTaskInvocationsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            taskId: taskId, 
            windowExecutionId: windowExecutionId
        )
        return try await self.describeMaintenanceWindowExecutionTaskInvocations(input, logger: logger)
    }

    /// For a given maintenance window execution, lists the tasks that were run.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowExecutionTasks(_ input: DescribeMaintenanceWindowExecutionTasksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowExecutionTasksResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowExecutionTasks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// For a given maintenance window execution, lists the tasks that were run.
    ///
    /// Parameters:
    ///   - filters: Optional filters used to scope down the returned tasks. The supported filter key is STATUS with the corresponding values PENDING, IN_PROGRESS, SUCCESS, FAILED, TIMED_OUT, CANCELLING, and CANCELLED.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - windowExecutionId: The ID of the maintenance window execution whose task executions should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowExecutionTasks(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowExecutionTasksResult {
        let input = DescribeMaintenanceWindowExecutionTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            windowExecutionId: windowExecutionId
        )
        return try await self.describeMaintenanceWindowExecutionTasks(input, logger: logger)
    }

    /// Lists the executions of a maintenance window. This includes information about when the maintenance window was scheduled to be active, and information about tasks registered and run with the maintenance window.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowExecutions(_ input: DescribeMaintenanceWindowExecutionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowExecutionsResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowExecutions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the executions of a maintenance window. This includes information about when the maintenance window was scheduled to be active, and information about tasks registered and run with the maintenance window.
    ///
    /// Parameters:
    ///   - filters: Each entry in the array is a structure containing:   Key. A string between 1 and 128 characters. Supported keys include ExecutedBefore and ExecutedAfter.   Values. An array of strings, each between 1 and 256 characters. Supported values are date/time strings in a valid ISO 8601 date/time format, such as 2024-11-04T05:00:00Z.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - windowId: The ID of the maintenance window whose executions should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowExecutions(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowExecutionsResult {
        let input = DescribeMaintenanceWindowExecutionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            windowId: windowId
        )
        return try await self.describeMaintenanceWindowExecutions(input, logger: logger)
    }

    /// Retrieves information about upcoming executions of a maintenance window.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowSchedule(_ input: DescribeMaintenanceWindowScheduleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowScheduleResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowSchedule", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about upcoming executions of a maintenance window.
    ///
    /// Parameters:
    ///   - filters: Filters used to limit the range of results. For example, you can limit maintenance window executions to only those scheduled before or after a certain date and time.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - resourceType: The type of resource you want to retrieve information about. For example, INSTANCE.
    ///   - targets: The managed node ID or key-value pair to retrieve information about.
    ///   - windowId: The ID of the maintenance window to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowSchedule(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceType: MaintenanceWindowResourceType? = nil,
        targets: [Target]? = nil,
        windowId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowScheduleResult {
        let input = DescribeMaintenanceWindowScheduleRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            targets: targets, 
            windowId: windowId
        )
        return try await self.describeMaintenanceWindowSchedule(input, logger: logger)
    }

    /// Lists the targets registered with the maintenance window.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowTargets(_ input: DescribeMaintenanceWindowTargetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowTargetsResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowTargets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the targets registered with the maintenance window.
    ///
    /// Parameters:
    ///   - filters: Optional filters that can be used to narrow down the scope of the returned window targets. The supported filter keys are Type, WindowTargetId, and OwnerInformation.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - windowId: The ID of the maintenance window whose targets should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowTargets(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowTargetsResult {
        let input = DescribeMaintenanceWindowTargetsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            windowId: windowId
        )
        return try await self.describeMaintenanceWindowTargets(input, logger: logger)
    }

    /// Lists the tasks in a maintenance window.  For maintenance window tasks without a specified target, you can't supply values for --max-errors and --max-concurrency. Instead, the system inserts a placeholder value of 1, which may be reported in the response to this command. These values don't affect the running of your task and can be ignored.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowTasks(_ input: DescribeMaintenanceWindowTasksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowTasksResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowTasks", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the tasks in a maintenance window.  For maintenance window tasks without a specified target, you can't supply values for --max-errors and --max-concurrency. Instead, the system inserts a placeholder value of 1, which may be reported in the response to this command. These values don't affect the running of your task and can be ignored.
    ///
    /// Parameters:
    ///   - filters: Optional filters used to narrow down the scope of the returned tasks. The supported filter keys are WindowTaskId, TaskArn, Priority, and TaskType.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - windowId: The ID of the maintenance window whose tasks should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowTasks(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowTasksResult {
        let input = DescribeMaintenanceWindowTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            windowId: windowId
        )
        return try await self.describeMaintenanceWindowTasks(input, logger: logger)
    }

    /// Retrieves the maintenance windows in an Amazon Web Services account.
    @Sendable
    @inlinable
    public func describeMaintenanceWindows(_ input: DescribeMaintenanceWindowsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowsResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindows", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the maintenance windows in an Amazon Web Services account.
    ///
    /// Parameters:
    ///   - filters: Optional filters used to narrow down the scope of the returned maintenance windows. Supported filter keys are Name and Enabled. For example, Name=MyMaintenanceWindow and Enabled=True.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindows(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowsResult {
        let input = DescribeMaintenanceWindowsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describeMaintenanceWindows(input, logger: logger)
    }

    /// Retrieves information about the maintenance window targets or tasks that a managed node is associated with.
    @Sendable
    @inlinable
    public func describeMaintenanceWindowsForTarget(_ input: DescribeMaintenanceWindowsForTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeMaintenanceWindowsForTargetResult {
        try await self.client.execute(
            operation: "DescribeMaintenanceWindowsForTarget", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about the maintenance window targets or tasks that a managed node is associated with.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - resourceType: The type of resource you want to retrieve information about. For example, INSTANCE.
    ///   - targets: The managed node ID or key-value pair to retrieve information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeMaintenanceWindowsForTarget(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceType: MaintenanceWindowResourceType,
        targets: [Target],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeMaintenanceWindowsForTargetResult {
        let input = DescribeMaintenanceWindowsForTargetRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceType: resourceType, 
            targets: targets
        )
        return try await self.describeMaintenanceWindowsForTarget(input, logger: logger)
    }

    /// Query a set of OpsItems. You must have permission in Identity and Access Management (IAM) to query a list of OpsItems. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func describeOpsItems(_ input: DescribeOpsItemsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeOpsItemsResponse {
        try await self.client.execute(
            operation: "DescribeOpsItems", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Query a set of OpsItems. You must have permission in Identity and Access Management (IAM) to query a list of OpsItems. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - opsItemFilters: One or more filters to limit the response.   Key: CreatedTime Operations: GreaterThan, LessThan   Key: LastModifiedBy Operations: Contains, Equals   Key: LastModifiedTime Operations: GreaterThan, LessThan   Key: Priority Operations: Equals   Key: Source Operations: Contains, Equals   Key: Status Operations: Equals   Key: Title* Operations: Equals,Contains   Key: OperationalData** Operations: Equals   Key: OperationalDataKey Operations: Equals   Key: OperationalDataValue Operations: Equals, Contains   Key: OpsItemId Operations: Equals   Key: ResourceId Operations: Contains   Key: AutomationId Operations: Equals   Key: AccountId Operations: Equals   *The Equals operator for Title matches the first 100 characters. If you specify more than 100 characters, they system returns an error that the filter value exceeds the length limit. **If you filter the response by using the OperationalData operator, specify a key-value pair by using the following JSON format: {"key":"key_name","value":"a_value"}
    ///   - logger: Logger use during operation
    @inlinable
    public func describeOpsItems(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        opsItemFilters: [OpsItemFilter]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeOpsItemsResponse {
        let input = DescribeOpsItemsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            opsItemFilters: opsItemFilters
        )
        return try await self.describeOpsItems(input, logger: logger)
    }

    /// Lists the parameters in your Amazon Web Services account or the parameters shared with you when you enable the Shared option. Request results are returned on a best-effort basis. If you specify MaxResults in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of MaxResults. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a NextToken. You can specify the NextToken in a subsequent call to get the next set of results. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, DescribeParameters retrieves whatever the original key alias was referencing.
    @Sendable
    @inlinable
    public func describeParameters(_ input: DescribeParametersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeParametersResult {
        try await self.client.execute(
            operation: "DescribeParameters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the parameters in your Amazon Web Services account or the parameters shared with you when you enable the Shared option. Request results are returned on a best-effort basis. If you specify MaxResults in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of MaxResults. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a NextToken. You can specify the NextToken in a subsequent call to get the next set of results. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, DescribeParameters retrieves whatever the original key alias was referencing.
    ///
    /// Parameters:
    ///   - filters: This data type is deprecated. Instead, use ParameterFilters.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - parameterFilters: Filters to limit the request results.
    ///   - shared: Lists parameters that are shared with you.  By default when using this option, the command returns parameters that have been shared using a standard Resource Access Manager Resource Share. In order for a parameter that was shared using the PutResourcePolicy command to be returned, the associated RAM Resource Share Created From Policy must have been promoted to a standard Resource Share using the RAM PromoteResourceShareCreatedFromPolicy API operation. For more information about sharing parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeParameters(
        filters: [ParametersFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        parameterFilters: [ParameterStringFilter]? = nil,
        shared: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeParametersResult {
        let input = DescribeParametersRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            parameterFilters: parameterFilters, 
            shared: shared
        )
        return try await self.describeParameters(input, logger: logger)
    }

    /// Lists the patch baselines in your Amazon Web Services account.
    @Sendable
    @inlinable
    public func describePatchBaselines(_ input: DescribePatchBaselinesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePatchBaselinesResult {
        try await self.client.execute(
            operation: "DescribePatchBaselines", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the patch baselines in your Amazon Web Services account.
    ///
    /// Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribePatchBaselines include the following:     NAME_PREFIX   Sample values: AWS- | My-      OWNER   Sample values: AWS | Self      OPERATING_SYSTEM   Sample values: AMAZON_LINUX | SUSE | WINDOWS
    ///   - maxResults: The maximum number of patch baselines to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describePatchBaselines(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePatchBaselinesResult {
        let input = DescribePatchBaselinesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describePatchBaselines(input, logger: logger)
    }

    /// Returns high-level aggregated patch compliance state information for a patch group.
    @Sendable
    @inlinable
    public func describePatchGroupState(_ input: DescribePatchGroupStateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePatchGroupStateResult {
        try await self.client.execute(
            operation: "DescribePatchGroupState", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns high-level aggregated patch compliance state information for a patch group.
    ///
    /// Parameters:
    ///   - patchGroup: The name of the patch group whose patch snapshot should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePatchGroupState(
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePatchGroupStateResult {
        let input = DescribePatchGroupStateRequest(
            patchGroup: patchGroup
        )
        return try await self.describePatchGroupState(input, logger: logger)
    }

    /// Lists all patch groups that have been registered with patch baselines.
    @Sendable
    @inlinable
    public func describePatchGroups(_ input: DescribePatchGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePatchGroupsResult {
        try await self.client.execute(
            operation: "DescribePatchGroups", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all patch groups that have been registered with patch baselines.
    ///
    /// Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribePatchGroups include the following:     NAME_PREFIX   Sample values: AWS- | My-.     OPERATING_SYSTEM   Sample values: AMAZON_LINUX | SUSE | WINDOWS
    ///   - maxResults: The maximum number of patch groups to return (per page).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describePatchGroups(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePatchGroupsResult {
        let input = DescribePatchGroupsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.describePatchGroups(input, logger: logger)
    }

    /// Lists the properties of available patches organized by product, product family, classification, severity, and other properties of available patches. You can use the reported properties in the filters you specify in requests for operations such as CreatePatchBaseline, UpdatePatchBaseline, DescribeAvailablePatches, and DescribePatchBaselines. The following section lists the properties that can be used in filters for each major operating system type:  AMAZON_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   AMAZON_LINUX_2  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   AMAZON_LINUX_2023  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   CENTOS  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   DEBIAN  Valid properties: PRODUCT | PRIORITY   MACOS  Valid properties: PRODUCT | CLASSIFICATION   ORACLE_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   REDHAT_ENTERPRISE_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   SUSE  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   UBUNTU  Valid properties: PRODUCT | PRIORITY   WINDOWS  Valid properties: PRODUCT | PRODUCT_FAMILY | CLASSIFICATION | MSRC_SEVERITY
    @Sendable
    @inlinable
    public func describePatchProperties(_ input: DescribePatchPropertiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePatchPropertiesResult {
        try await self.client.execute(
            operation: "DescribePatchProperties", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the properties of available patches organized by product, product family, classification, severity, and other properties of available patches. You can use the reported properties in the filters you specify in requests for operations such as CreatePatchBaseline, UpdatePatchBaseline, DescribeAvailablePatches, and DescribePatchBaselines. The following section lists the properties that can be used in filters for each major operating system type:  AMAZON_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   AMAZON_LINUX_2  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   AMAZON_LINUX_2023  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   CENTOS  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   DEBIAN  Valid properties: PRODUCT | PRIORITY   MACOS  Valid properties: PRODUCT | CLASSIFICATION   ORACLE_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   REDHAT_ENTERPRISE_LINUX  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   SUSE  Valid properties: PRODUCT | CLASSIFICATION | SEVERITY   UBUNTU  Valid properties: PRODUCT | PRIORITY   WINDOWS  Valid properties: PRODUCT | PRODUCT_FAMILY | CLASSIFICATION | MSRC_SEVERITY
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - operatingSystem: The operating system type for which to list patches.
    ///   - patchSet: Indicates whether to list patches for the Windows operating system or for applications released by Microsoft. Not applicable for the Linux or macOS operating systems.
    ///   - property: The patch property for which you want to view patch details.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePatchProperties(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        operatingSystem: OperatingSystem,
        patchSet: PatchSet? = nil,
        property: PatchProperty,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePatchPropertiesResult {
        let input = DescribePatchPropertiesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            operatingSystem: operatingSystem, 
            patchSet: patchSet, 
            property: property
        )
        return try await self.describePatchProperties(input, logger: logger)
    }

    /// Retrieves a list of all active sessions (both connected and disconnected) or terminated sessions from the past 30 days.
    @Sendable
    @inlinable
    public func describeSessions(_ input: DescribeSessionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSessionsResponse {
        try await self.client.execute(
            operation: "DescribeSessions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of all active sessions (both connected and disconnected) or terminated sessions from the past 30 days.
    ///
    /// Parameters:
    ///   - filters: One or more filters to limit the type of sessions returned by the request.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - state: The session status to retrieve a list of sessions for. For example, "Active".
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSessions(
        filters: [SessionFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        state: SessionState,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSessionsResponse {
        let input = DescribeSessionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            state: state
        )
        return try await self.describeSessions(input, logger: logger)
    }

    /// Deletes the association between an OpsItem and a related item. For example, this API operation can delete an Incident Manager incident from an OpsItem. Incident Manager is a tool in Amazon Web Services Systems Manager.
    @Sendable
    @inlinable
    public func disassociateOpsItemRelatedItem(_ input: DisassociateOpsItemRelatedItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisassociateOpsItemRelatedItemResponse {
        try await self.client.execute(
            operation: "DisassociateOpsItemRelatedItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the association between an OpsItem and a related item. For example, this API operation can delete an Incident Manager incident from an OpsItem. Incident Manager is a tool in Amazon Web Services Systems Manager.
    ///
    /// Parameters:
    ///   - associationId: The ID of the association for which you want to delete an association between the OpsItem and a related item.
    ///   - opsItemId: The ID of the OpsItem for which you want to delete an association between the OpsItem and a related item.
    ///   - logger: Logger use during operation
    @inlinable
    public func disassociateOpsItemRelatedItem(
        associationId: String,
        opsItemId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisassociateOpsItemRelatedItemResponse {
        let input = DisassociateOpsItemRelatedItemRequest(
            associationId: associationId, 
            opsItemId: opsItemId
        )
        return try await self.disassociateOpsItemRelatedItem(input, logger: logger)
    }

    /// Returns a credentials set to be used with just-in-time node access.
    @Sendable
    @inlinable
    public func getAccessToken(_ input: GetAccessTokenRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAccessTokenResponse {
        try await self.client.execute(
            operation: "GetAccessToken", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a credentials set to be used with just-in-time node access.
    ///
    /// Parameters:
    ///   - accessRequestId: The ID of a just-in-time node access request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAccessToken(
        accessRequestId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAccessTokenResponse {
        let input = GetAccessTokenRequest(
            accessRequestId: accessRequestId
        )
        return try await self.getAccessToken(input, logger: logger)
    }

    /// Get detailed information about a particular Automation execution.
    @Sendable
    @inlinable
    public func getAutomationExecution(_ input: GetAutomationExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAutomationExecutionResult {
        try await self.client.execute(
            operation: "GetAutomationExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get detailed information about a particular Automation execution.
    ///
    /// Parameters:
    ///   - automationExecutionId: The unique identifier for an existing automation execution to examine. The execution ID is returned by StartAutomationExecution when the execution of an Automation runbook is initiated.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAutomationExecution(
        automationExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAutomationExecutionResult {
        let input = GetAutomationExecutionRequest(
            automationExecutionId: automationExecutionId
        )
        return try await self.getAutomationExecution(input, logger: logger)
    }

    /// Gets the state of a Amazon Web Services Systems Manager change calendar at the current time or a specified time. If you specify a time, GetCalendarState returns the state of the calendar at that specific time, and returns the next time that the change calendar state will transition. If you don't specify a time, GetCalendarState uses the current time. Change Calendar entries have two possible states: OPEN or CLOSED. If you specify more than one calendar in a request, the command returns the status of OPEN only if all calendars in the request are open. If one or more calendars in the request are closed, the status returned is CLOSED. For more information about Change Calendar, a tool in Amazon Web Services Systems Manager, see Amazon Web Services Systems Manager Change Calendar in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func getCalendarState(_ input: GetCalendarStateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCalendarStateResponse {
        try await self.client.execute(
            operation: "GetCalendarState", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the state of a Amazon Web Services Systems Manager change calendar at the current time or a specified time. If you specify a time, GetCalendarState returns the state of the calendar at that specific time, and returns the next time that the change calendar state will transition. If you don't specify a time, GetCalendarState uses the current time. Change Calendar entries have two possible states: OPEN or CLOSED. If you specify more than one calendar in a request, the command returns the status of OPEN only if all calendars in the request are open. If one or more calendars in the request are closed, the status returned is CLOSED. For more information about Change Calendar, a tool in Amazon Web Services Systems Manager, see Amazon Web Services Systems Manager Change Calendar in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - atTime: (Optional) The specific time for which you want to get calendar state information, in ISO 8601 format. If you don't specify a value or AtTime, the current time is used.
    ///   - calendarNames: The names of Amazon Resource Names (ARNs) of the Systems Manager documents (SSM documents) that represent the calendar entries for which you want to get the state.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCalendarState(
        atTime: String? = nil,
        calendarNames: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCalendarStateResponse {
        let input = GetCalendarStateRequest(
            atTime: atTime, 
            calendarNames: calendarNames
        )
        return try await self.getCalendarState(input, logger: logger)
    }

    /// Returns detailed information about command execution for an invocation or plugin. The Run Command API follows an eventual consistency model, due to the distributed nature of the system supporting the API. This means that the result of an API command you run that affects your resources might not be immediately visible to all subsequent commands you run. You should keep this in mind when you carry out an API command that immediately follows a previous API command.  GetCommandInvocation only gives the execution status of a plugin in a document. To get the command execution status on a specific managed node, use ListCommandInvocations. To get the command execution status across managed nodes, use ListCommands.
    @Sendable
    @inlinable
    public func getCommandInvocation(_ input: GetCommandInvocationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCommandInvocationResult {
        try await self.client.execute(
            operation: "GetCommandInvocation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns detailed information about command execution for an invocation or plugin. The Run Command API follows an eventual consistency model, due to the distributed nature of the system supporting the API. This means that the result of an API command you run that affects your resources might not be immediately visible to all subsequent commands you run. You should keep this in mind when you carry out an API command that immediately follows a previous API command.  GetCommandInvocation only gives the execution status of a plugin in a document. To get the command execution status on a specific managed node, use ListCommandInvocations. To get the command execution status across managed nodes, use ListCommands.
    ///
    /// Parameters:
    ///   - commandId: (Required) The parent command ID of the invocation plugin.
    ///   - instanceId: (Required) The ID of the managed node targeted by the command. A managed node can be an Amazon Elastic Compute Cloud (Amazon EC2) instance, edge device, and on-premises server or VM in your hybrid environment that is configured for Amazon Web Services Systems Manager.
    ///   - pluginName: The name of the step for which you want detailed results. If the document contains only one step, you can omit the name and details for that step. If the document contains more than one step, you must specify the name of the step for which you want to view details. Be sure to specify the name of the step, not the name of a plugin like aws:RunShellScript. To find the PluginName, check the document content and find the name of the step you want details for. Alternatively, use ListCommandInvocations with the CommandId and Details parameters. The PluginName is the Name attribute of the CommandPlugin object in the CommandPlugins list.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCommandInvocation(
        commandId: String,
        instanceId: String,
        pluginName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCommandInvocationResult {
        let input = GetCommandInvocationRequest(
            commandId: commandId, 
            instanceId: instanceId, 
            pluginName: pluginName
        )
        return try await self.getCommandInvocation(input, logger: logger)
    }

    /// Retrieves the Session Manager connection status for a managed node to determine whether it is running and ready to receive Session Manager connections.
    @Sendable
    @inlinable
    public func getConnectionStatus(_ input: GetConnectionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetConnectionStatusResponse {
        try await self.client.execute(
            operation: "GetConnectionStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the Session Manager connection status for a managed node to determine whether it is running and ready to receive Session Manager connections.
    ///
    /// Parameters:
    ///   - target: The managed node ID.
    ///   - logger: Logger use during operation
    @inlinable
    public func getConnectionStatus(
        target: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetConnectionStatusResponse {
        let input = GetConnectionStatusRequest(
            target: target
        )
        return try await self.getConnectionStatus(input, logger: logger)
    }

    /// Retrieves the default patch baseline. Amazon Web Services Systems Manager supports creating multiple default patch baselines. For example, you can create a default patch baseline for each operating system. If you don't specify an operating system value, the default patch baseline for Windows is returned.
    @Sendable
    @inlinable
    public func getDefaultPatchBaseline(_ input: GetDefaultPatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDefaultPatchBaselineResult {
        try await self.client.execute(
            operation: "GetDefaultPatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the default patch baseline. Amazon Web Services Systems Manager supports creating multiple default patch baselines. For example, you can create a default patch baseline for each operating system. If you don't specify an operating system value, the default patch baseline for Windows is returned.
    ///
    /// Parameters:
    ///   - operatingSystem: Returns the default patch baseline for the specified operating system.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDefaultPatchBaseline(
        operatingSystem: OperatingSystem? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDefaultPatchBaselineResult {
        let input = GetDefaultPatchBaselineRequest(
            operatingSystem: operatingSystem
        )
        return try await self.getDefaultPatchBaseline(input, logger: logger)
    }

    /// Retrieves the current snapshot for the patch baseline the managed node uses. This API is primarily used by the AWS-RunPatchBaseline Systems Manager document (SSM document).  If you run the command locally, such as with the Command Line Interface (CLI), the system attempts to use your local Amazon Web Services credentials and the operation fails. To avoid this, you can run the command in the Amazon Web Services Systems Manager console. Use Run Command, a tool in Amazon Web Services Systems Manager, with an SSM document that enables you to target a managed node with a script or command. For example, run the command using the AWS-RunShellScript document or the AWS-RunPowerShellScript document.
    @Sendable
    @inlinable
    public func getDeployablePatchSnapshotForInstance(_ input: GetDeployablePatchSnapshotForInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDeployablePatchSnapshotForInstanceResult {
        try await self.client.execute(
            operation: "GetDeployablePatchSnapshotForInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the current snapshot for the patch baseline the managed node uses. This API is primarily used by the AWS-RunPatchBaseline Systems Manager document (SSM document).  If you run the command locally, such as with the Command Line Interface (CLI), the system attempts to use your local Amazon Web Services credentials and the operation fails. To avoid this, you can run the command in the Amazon Web Services Systems Manager console. Use Run Command, a tool in Amazon Web Services Systems Manager, with an SSM document that enables you to target a managed node with a script or command. For example, run the command using the AWS-RunShellScript document or the AWS-RunPowerShellScript document.
    ///
    /// Parameters:
    ///   - baselineOverride: Defines the basic information about a patch baseline override.
    ///   - instanceId: The ID of the managed node for which the appropriate patch snapshot should be retrieved.
    ///   - snapshotId: The snapshot ID provided by the user when running AWS-RunPatchBaseline.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDeployablePatchSnapshotForInstance(
        baselineOverride: BaselineOverride? = nil,
        instanceId: String,
        snapshotId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDeployablePatchSnapshotForInstanceResult {
        let input = GetDeployablePatchSnapshotForInstanceRequest(
            baselineOverride: baselineOverride, 
            instanceId: instanceId, 
            snapshotId: snapshotId
        )
        return try await self.getDeployablePatchSnapshotForInstance(input, logger: logger)
    }

    /// Gets the contents of the specified Amazon Web Services Systems Manager document (SSM document).
    @Sendable
    @inlinable
    public func getDocument(_ input: GetDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDocumentResult {
        try await self.client.execute(
            operation: "GetDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the contents of the specified Amazon Web Services Systems Manager document (SSM document).
    ///
    /// Parameters:
    ///   - documentFormat: Returns the document in the specified format. The document format can be either JSON or YAML. JSON is the default format.
    ///   - documentVersion: The document version for which you want information.
    ///   - name: The name of the SSM document.
    ///   - versionName: An optional field specifying the version of the artifact associated with the document. For example, 12.6. This value is unique across all versions of a document and can't be changed.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocument(
        documentFormat: DocumentFormat? = nil,
        documentVersion: String? = nil,
        name: String,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDocumentResult {
        let input = GetDocumentRequest(
            documentFormat: documentFormat, 
            documentVersion: documentVersion, 
            name: name, 
            versionName: versionName
        )
        return try await self.getDocument(input, logger: logger)
    }

    /// Initiates the process of retrieving an existing preview that shows the effects that running a specified Automation runbook would have on the targeted resources.
    @Sendable
    @inlinable
    public func getExecutionPreview(_ input: GetExecutionPreviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetExecutionPreviewResponse {
        try await self.client.execute(
            operation: "GetExecutionPreview", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates the process of retrieving an existing preview that shows the effects that running a specified Automation runbook would have on the targeted resources.
    ///
    /// Parameters:
    ///   - executionPreviewId: The ID of the existing execution preview.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExecutionPreview(
        executionPreviewId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetExecutionPreviewResponse {
        let input = GetExecutionPreviewRequest(
            executionPreviewId: executionPreviewId
        )
        return try await self.getExecutionPreview(input, logger: logger)
    }

    /// Query inventory information. This includes managed node status, such as Stopped or Terminated.
    @Sendable
    @inlinable
    public func getInventory(_ input: GetInventoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInventoryResult {
        try await self.client.execute(
            operation: "GetInventory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Query inventory information. This includes managed node status, such as Stopped or Terminated.
    ///
    /// Parameters:
    ///   - aggregators: Returns counts of inventory types based on one or more expressions. For example, if you aggregate by using an expression that uses the AWS:InstanceInformation.PlatformType type, you can see a count of how many Windows and Linux managed nodes exist in your inventoried fleet.
    ///   - filters: One or more filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - resultAttributes: The list of inventory item types to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInventory(
        aggregators: [InventoryAggregator]? = nil,
        filters: [InventoryFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resultAttributes: [ResultAttribute]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInventoryResult {
        let input = GetInventoryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resultAttributes: resultAttributes
        )
        return try await self.getInventory(input, logger: logger)
    }

    /// Return a list of inventory type names for the account, or return a list of attribute names for a specific Inventory item type.
    @Sendable
    @inlinable
    public func getInventorySchema(_ input: GetInventorySchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInventorySchemaResult {
        try await self.client.execute(
            operation: "GetInventorySchema", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Return a list of inventory type names for the account, or return a list of attribute names for a specific Inventory item type.
    ///
    /// Parameters:
    ///   - aggregator: Returns inventory schemas that support aggregation. For example, this call returns the AWS:InstanceInformation type, because it supports aggregation based on the PlatformName, PlatformType, and PlatformVersion attributes.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - subType: Returns the sub-type schema for a specified inventory type.
    ///   - typeName: The type of inventory item to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInventorySchema(
        aggregator: Bool? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        subType: Bool? = nil,
        typeName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInventorySchemaResult {
        let input = GetInventorySchemaRequest(
            aggregator: aggregator, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            subType: subType, 
            typeName: typeName
        )
        return try await self.getInventorySchema(input, logger: logger)
    }

    /// Retrieves a maintenance window.
    @Sendable
    @inlinable
    public func getMaintenanceWindow(_ input: GetMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMaintenanceWindowResult {
        try await self.client.execute(
            operation: "GetMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a maintenance window.
    ///
    /// Parameters:
    ///   - windowId: The ID of the maintenance window for which you want to retrieve information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMaintenanceWindow(
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMaintenanceWindowResult {
        let input = GetMaintenanceWindowRequest(
            windowId: windowId
        )
        return try await self.getMaintenanceWindow(input, logger: logger)
    }

    /// Retrieves details about a specific a maintenance window execution.
    @Sendable
    @inlinable
    public func getMaintenanceWindowExecution(_ input: GetMaintenanceWindowExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMaintenanceWindowExecutionResult {
        try await self.client.execute(
            operation: "GetMaintenanceWindowExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about a specific a maintenance window execution.
    ///
    /// Parameters:
    ///   - windowExecutionId: The ID of the maintenance window execution that includes the task.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMaintenanceWindowExecution(
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMaintenanceWindowExecutionResult {
        let input = GetMaintenanceWindowExecutionRequest(
            windowExecutionId: windowExecutionId
        )
        return try await self.getMaintenanceWindowExecution(input, logger: logger)
    }

    /// Retrieves the details about a specific task run as part of a maintenance window execution.
    @Sendable
    @inlinable
    public func getMaintenanceWindowExecutionTask(_ input: GetMaintenanceWindowExecutionTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMaintenanceWindowExecutionTaskResult {
        try await self.client.execute(
            operation: "GetMaintenanceWindowExecutionTask", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the details about a specific task run as part of a maintenance window execution.
    ///
    /// Parameters:
    ///   - taskId: The ID of the specific task execution in the maintenance window task that should be retrieved.
    ///   - windowExecutionId: The ID of the maintenance window execution that includes the task.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMaintenanceWindowExecutionTask(
        taskId: String,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMaintenanceWindowExecutionTaskResult {
        let input = GetMaintenanceWindowExecutionTaskRequest(
            taskId: taskId, 
            windowExecutionId: windowExecutionId
        )
        return try await self.getMaintenanceWindowExecutionTask(input, logger: logger)
    }

    /// Retrieves information about a specific task running on a specific target.
    @Sendable
    @inlinable
    public func getMaintenanceWindowExecutionTaskInvocation(_ input: GetMaintenanceWindowExecutionTaskInvocationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMaintenanceWindowExecutionTaskInvocationResult {
        try await self.client.execute(
            operation: "GetMaintenanceWindowExecutionTaskInvocation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about a specific task running on a specific target.
    ///
    /// Parameters:
    ///   - invocationId: The invocation ID to retrieve.
    ///   - taskId: The ID of the specific task in the maintenance window task that should be retrieved.
    ///   - windowExecutionId: The ID of the maintenance window execution for which the task is a part.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMaintenanceWindowExecutionTaskInvocation(
        invocationId: String,
        taskId: String,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMaintenanceWindowExecutionTaskInvocationResult {
        let input = GetMaintenanceWindowExecutionTaskInvocationRequest(
            invocationId: invocationId, 
            taskId: taskId, 
            windowExecutionId: windowExecutionId
        )
        return try await self.getMaintenanceWindowExecutionTaskInvocation(input, logger: logger)
    }

    /// Retrieves the details of a maintenance window task.  For maintenance window tasks without a specified target, you can't supply values for --max-errors and --max-concurrency. Instead, the system inserts a placeholder value of 1, which may be reported in the response to this command. These values don't affect the running of your task and can be ignored.  To retrieve a list of tasks in a maintenance window, instead use the DescribeMaintenanceWindowTasks command.
    @Sendable
    @inlinable
    public func getMaintenanceWindowTask(_ input: GetMaintenanceWindowTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetMaintenanceWindowTaskResult {
        try await self.client.execute(
            operation: "GetMaintenanceWindowTask", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the details of a maintenance window task.  For maintenance window tasks without a specified target, you can't supply values for --max-errors and --max-concurrency. Instead, the system inserts a placeholder value of 1, which may be reported in the response to this command. These values don't affect the running of your task and can be ignored.  To retrieve a list of tasks in a maintenance window, instead use the DescribeMaintenanceWindowTasks command.
    ///
    /// Parameters:
    ///   - windowId: The maintenance window ID that includes the task to retrieve.
    ///   - windowTaskId: The maintenance window task ID to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getMaintenanceWindowTask(
        windowId: String,
        windowTaskId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetMaintenanceWindowTaskResult {
        let input = GetMaintenanceWindowTaskRequest(
            windowId: windowId, 
            windowTaskId: windowTaskId
        )
        return try await self.getMaintenanceWindowTask(input, logger: logger)
    }

    /// Get information about an OpsItem by using the ID. You must have permission in Identity and Access Management (IAM) to view information about an OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func getOpsItem(_ input: GetOpsItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOpsItemResponse {
        try await self.client.execute(
            operation: "GetOpsItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get information about an OpsItem by using the ID. You must have permission in Identity and Access Management (IAM) to view information about an OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - opsItemArn: The OpsItem Amazon Resource Name (ARN).
    ///   - opsItemId: The ID of the OpsItem that you want to get.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOpsItem(
        opsItemArn: String? = nil,
        opsItemId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOpsItemResponse {
        let input = GetOpsItemRequest(
            opsItemArn: opsItemArn, 
            opsItemId: opsItemId
        )
        return try await self.getOpsItem(input, logger: logger)
    }

    /// View operational metadata related to an application in Application Manager.
    @Sendable
    @inlinable
    public func getOpsMetadata(_ input: GetOpsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOpsMetadataResult {
        try await self.client.execute(
            operation: "GetOpsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// View operational metadata related to an application in Application Manager.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - opsMetadataArn: The Amazon Resource Name (ARN) of an OpsMetadata Object to view.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOpsMetadata(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        opsMetadataArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOpsMetadataResult {
        let input = GetOpsMetadataRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            opsMetadataArn: opsMetadataArn
        )
        return try await self.getOpsMetadata(input, logger: logger)
    }

    /// View a summary of operations metadata (OpsData) based on specified filters and aggregators. OpsData can include information about Amazon Web Services Systems Manager OpsCenter operational workitems (OpsItems) as well as information about any Amazon Web Services resource or service configured to report OpsData to Amazon Web Services Systems Manager Explorer.
    @Sendable
    @inlinable
    public func getOpsSummary(_ input: GetOpsSummaryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOpsSummaryResult {
        try await self.client.execute(
            operation: "GetOpsSummary", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// View a summary of operations metadata (OpsData) based on specified filters and aggregators. OpsData can include information about Amazon Web Services Systems Manager OpsCenter operational workitems (OpsItems) as well as information about any Amazon Web Services resource or service configured to report OpsData to Amazon Web Services Systems Manager Explorer.
    ///
    /// Parameters:
    ///   - aggregators: Optional aggregators that return counts of OpsData based on one or more expressions.
    ///   - filters: Optional filters used to scope down the returned OpsData.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - resultAttributes: The OpsData data type to return.
    ///   - syncName: Specify the name of a resource data sync to get.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOpsSummary(
        aggregators: [OpsAggregator]? = nil,
        filters: [OpsFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resultAttributes: [OpsResultAttribute]? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOpsSummaryResult {
        let input = GetOpsSummaryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resultAttributes: resultAttributes, 
            syncName: syncName
        )
        return try await self.getOpsSummary(input, logger: logger)
    }

    /// Get information about a single parameter by specifying the parameter name. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  To get information about more than one parameter at a time, use the GetParameters operation.
    @Sendable
    @inlinable
    public func getParameter(_ input: GetParameterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetParameterResult {
        try await self.client.execute(
            operation: "GetParameter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get information about a single parameter by specifying the parameter name. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  To get information about more than one parameter at a time, use the GetParameters operation.
    ///
    /// Parameters:
    ///   - name: The name or Amazon Resource Name (ARN) of the parameter that you want to query. For parameters shared with you from another account, you must use the full ARN. To query by parameter label, use "Name": "name:label". To query by parameter version, use "Name": "name:version". For more information about shared parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    ///   - withDecryption: Return decrypted values for secure string parameters. This flag is ignored for String and StringList parameter types.
    ///   - logger: Logger use during operation
    @inlinable
    public func getParameter(
        name: String,
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetParameterResult {
        let input = GetParameterRequest(
            name: name, 
            withDecryption: withDecryption
        )
        return try await self.getParameter(input, logger: logger)
    }

    /// Retrieves the history of all changes to a parameter. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, GetParameterHistory retrieves whatever the original key alias was referencing.
    @Sendable
    @inlinable
    public func getParameterHistory(_ input: GetParameterHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetParameterHistoryResult {
        try await self.client.execute(
            operation: "GetParameterHistory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the history of all changes to a parameter. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.  If you change the KMS key alias for the KMS key used to encrypt a parameter, then you must also update the key alias the parameter uses to reference KMS. Otherwise, GetParameterHistory retrieves whatever the original key alias was referencing.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - name: The name or Amazon Resource Name (ARN) of the parameter for which you want to review history. For parameters shared with you from another account, you must use the full ARN.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - withDecryption: Return decrypted values for secure string parameters. This flag is ignored for String and StringList parameter types.
    ///   - logger: Logger use during operation
    @inlinable
    public func getParameterHistory(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetParameterHistoryResult {
        let input = GetParameterHistoryRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            withDecryption: withDecryption
        )
        return try await self.getParameterHistory(input, logger: logger)
    }

    /// Get information about one or more parameters by specifying multiple parameter names.  To get information about a single parameter, you can use the GetParameter operation instead.  Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    @Sendable
    @inlinable
    public func getParameters(_ input: GetParametersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetParametersResult {
        try await self.client.execute(
            operation: "GetParameters", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get information about one or more parameters by specifying multiple parameter names.  To get information about a single parameter, you can use the GetParameter operation instead.  Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    ///
    /// Parameters:
    ///   - names: The names or Amazon Resource Names (ARNs) of the parameters that you want to query. For parameters shared with you from another account, you must use the full ARNs. To query by parameter label, use "Name": "name:label". To query by parameter version, use "Name": "name:version".  The results for GetParameters requests are listed in alphabetical order in query responses.  For information about shared parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    ///   - withDecryption: Return decrypted secure string value. Return decrypted values for secure string parameters. This flag is ignored for String and StringList parameter types.
    ///   - logger: Logger use during operation
    @inlinable
    public func getParameters(
        names: [String],
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetParametersResult {
        let input = GetParametersRequest(
            names: names, 
            withDecryption: withDecryption
        )
        return try await self.getParameters(input, logger: logger)
    }

    /// Retrieve information about one or more parameters under a specified level in a hierarchy.  Request results are returned on a best-effort basis. If you specify MaxResults in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of MaxResults. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a NextToken. You can specify the NextToken in a subsequent call to get the next set of results. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    @Sendable
    @inlinable
    public func getParametersByPath(_ input: GetParametersByPathRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetParametersByPathResult {
        try await self.client.execute(
            operation: "GetParametersByPath", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve information about one or more parameters under a specified level in a hierarchy.  Request results are returned on a best-effort basis. If you specify MaxResults in the request, the response includes information up to the limit specified. The number of items returned, however, can be between zero and the value of MaxResults. If the service reaches an internal limit while processing the results, it stops the operation and returns the matching values up to that point and a NextToken. You can specify the NextToken in a subsequent call to get the next set of results. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - parameterFilters: Filters to limit the request results.  The following Key values are supported for GetParametersByPath: Type, KeyId, and Label. The following Key values aren't supported for GetParametersByPath: tag, DataType, Name, Path, and Tier.
    ///   - path: The hierarchy for the parameter. Hierarchies start with a forward slash (/). The hierarchy is the parameter name except the last part of the parameter. For the API call to succeed, the last part of the parameter name can't be in the path. A parameter name hierarchy can have a maximum of 15 levels. Here is an example of a hierarchy: /Finance/Prod/IAD/WinServ2016/license33
    ///   - recursive: Retrieve all parameters within a hierarchy.  If a user has access to a path, then the user can access all levels of that path. For example, if a user has permission to access path /a, then the user can also access /a/b. Even if a user has explicitly been denied access in IAM for parameter /a/b, they can still call the GetParametersByPath API operation recursively for /a and view /a/b.
    ///   - withDecryption: Retrieve all parameters in a hierarchy with their value decrypted.
    ///   - logger: Logger use during operation
    @inlinable
    public func getParametersByPath(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        parameterFilters: [ParameterStringFilter]? = nil,
        path: String,
        recursive: Bool? = nil,
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetParametersByPathResult {
        let input = GetParametersByPathRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            parameterFilters: parameterFilters, 
            path: path, 
            recursive: recursive, 
            withDecryption: withDecryption
        )
        return try await self.getParametersByPath(input, logger: logger)
    }

    /// Retrieves information about a patch baseline.
    @Sendable
    @inlinable
    public func getPatchBaseline(_ input: GetPatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPatchBaselineResult {
        try await self.client.execute(
            operation: "GetPatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about a patch baseline.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline to retrieve.  To retrieve information about an Amazon Web Services managed patch baseline, specify the full Amazon Resource Name (ARN) of the baseline. For example, for the baseline AWS-AmazonLinuxDefaultPatchBaseline, specify arn:aws:ssm:us-east-2:733109147000:patchbaseline/pb-0e392de35e7c563b7 instead of pb-0e392de35e7c563b7.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPatchBaseline(
        baselineId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPatchBaselineResult {
        let input = GetPatchBaselineRequest(
            baselineId: baselineId
        )
        return try await self.getPatchBaseline(input, logger: logger)
    }

    /// Retrieves the patch baseline that should be used for the specified patch group.
    @Sendable
    @inlinable
    public func getPatchBaselineForPatchGroup(_ input: GetPatchBaselineForPatchGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPatchBaselineForPatchGroupResult {
        try await self.client.execute(
            operation: "GetPatchBaselineForPatchGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the patch baseline that should be used for the specified patch group.
    ///
    /// Parameters:
    ///   - operatingSystem: Returns the operating system rule specified for patch groups using the patch baseline.
    ///   - patchGroup: The name of the patch group whose patch baseline should be retrieved.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPatchBaselineForPatchGroup(
        operatingSystem: OperatingSystem? = nil,
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPatchBaselineForPatchGroupResult {
        let input = GetPatchBaselineForPatchGroupRequest(
            operatingSystem: operatingSystem, 
            patchGroup: patchGroup
        )
        return try await self.getPatchBaselineForPatchGroup(input, logger: logger)
    }

    /// Returns an array of the Policy object.
    @Sendable
    @inlinable
    public func getResourcePolicies(_ input: GetResourcePoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourcePoliciesResponse {
        try await self.client.execute(
            operation: "GetResourcePolicies", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns an array of the Policy object.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource to which the policies are attached.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResourcePolicies(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourcePoliciesResponse {
        let input = GetResourcePoliciesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.getResourcePolicies(input, logger: logger)
    }

    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of false. This means the user can't use this feature unless they change the setting to true and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the UpdateServiceSetting API operation to change the default setting. Or use the ResetServiceSetting to change the value back to the original value defined by the Amazon Web Services service team. Query the current service setting for the Amazon Web Services account.
    @Sendable
    @inlinable
    public func getServiceSetting(_ input: GetServiceSettingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetServiceSettingResult {
        try await self.client.execute(
            operation: "GetServiceSetting", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of false. This means the user can't use this feature unless they change the setting to true and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the UpdateServiceSetting API operation to change the default setting. Or use the ResetServiceSetting to change the value back to the original value defined by the Amazon Web Services service team. Query the current service setting for the Amazon Web Services account.
    ///
    /// Parameters:
    ///   - settingId: The ID of the service setting to get. The setting ID can be one of the following.    /ssm/appmanager/appmanager-enabled     /ssm/automation/customer-script-log-destination     /ssm/automation/customer-script-log-group-name    /ssm/automation/enable-adaptive-concurrency    /ssm/documents/console/public-sharing-permission     /ssm/managed-instance/activation-tier     /ssm/managed-instance/default-ec2-instance-management-role     /ssm/opsinsights/opscenter     /ssm/parameter-store/default-parameter-tier     /ssm/parameter-store/high-throughput-enabled
    ///   - logger: Logger use during operation
    @inlinable
    public func getServiceSetting(
        settingId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetServiceSettingResult {
        let input = GetServiceSettingRequest(
            settingId: settingId
        )
        return try await self.getServiceSetting(input, logger: logger)
    }

    /// A parameter label is a user-defined alias to help you manage different versions of a parameter. When you modify a parameter, Amazon Web Services Systems Manager automatically saves a new version and increments the version number by one. A label can help you remember the purpose of a parameter when there are multiple versions.  Parameter labels have the following requirements and restrictions.   A version of a parameter can have a maximum of 10 labels.   You can't attach the same label to different versions of the same parameter. For example, if version 1 has the label Production, then you can't attach Production to version 2.   You can move a label from one version of a parameter to another.   You can't create a label when you create a new parameter. You must attach a label to a specific version of a parameter.   If you no longer want to use a parameter label, then you can either delete it or move it to a different version of a parameter.   A label can have a maximum of 100 characters.   Labels can contain letters (case sensitive), numbers, periods (.), hyphens (-), or underscores (_).   Labels can't begin with a number, "aws" or "ssm" (not case sensitive). If a label fails to meet these requirements, then the label isn't associated with a parameter and the system displays it in the list of InvalidLabels.   Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    @Sendable
    @inlinable
    public func labelParameterVersion(_ input: LabelParameterVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> LabelParameterVersionResult {
        try await self.client.execute(
            operation: "LabelParameterVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A parameter label is a user-defined alias to help you manage different versions of a parameter. When you modify a parameter, Amazon Web Services Systems Manager automatically saves a new version and increments the version number by one. A label can help you remember the purpose of a parameter when there are multiple versions.  Parameter labels have the following requirements and restrictions.   A version of a parameter can have a maximum of 10 labels.   You can't attach the same label to different versions of the same parameter. For example, if version 1 has the label Production, then you can't attach Production to version 2.   You can move a label from one version of a parameter to another.   You can't create a label when you create a new parameter. You must attach a label to a specific version of a parameter.   If you no longer want to use a parameter label, then you can either delete it or move it to a different version of a parameter.   A label can have a maximum of 100 characters.   Labels can contain letters (case sensitive), numbers, periods (.), hyphens (-), or underscores (_).   Labels can't begin with a number, "aws" or "ssm" (not case sensitive). If a label fails to meet these requirements, then the label isn't associated with a parameter and the system displays it in the list of InvalidLabels.   Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    ///
    /// Parameters:
    ///   - labels: One or more labels to attach to the specified parameter version.
    ///   - name: The parameter name on which you want to attach one or more labels.  You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.
    ///   - parameterVersion: The specific version of the parameter on which you want to attach one or more labels. If no version is specified, the system attaches the label to the latest version.
    ///   - logger: Logger use during operation
    @inlinable
    public func labelParameterVersion(
        labels: [String],
        name: String,
        parameterVersion: Int64? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> LabelParameterVersionResult {
        let input = LabelParameterVersionRequest(
            labels: labels, 
            name: name, 
            parameterVersion: parameterVersion
        )
        return try await self.labelParameterVersion(input, logger: logger)
    }

    /// Retrieves all versions of an association for a specific association ID.
    @Sendable
    @inlinable
    public func listAssociationVersions(_ input: ListAssociationVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssociationVersionsResult {
        try await self.client.execute(
            operation: "ListAssociationVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves all versions of an association for a specific association ID.
    ///
    /// Parameters:
    ///   - associationId: The association ID for which you want to view all versions.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssociationVersions(
        associationId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssociationVersionsResult {
        let input = ListAssociationVersionsRequest(
            associationId: associationId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssociationVersions(input, logger: logger)
    }

    /// Returns all State Manager associations in the current Amazon Web Services account and Amazon Web Services Region. You can limit the results to a specific State Manager association document or managed node by specifying a filter. State Manager is a tool in Amazon Web Services Systems Manager.
    @Sendable
    @inlinable
    public func listAssociations(_ input: ListAssociationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAssociationsResult {
        try await self.client.execute(
            operation: "ListAssociations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all State Manager associations in the current Amazon Web Services account and Amazon Web Services Region. You can limit the results to a specific State Manager association document or managed node by specifying a filter. State Manager is a tool in Amazon Web Services Systems Manager.
    ///
    /// Parameters:
    ///   - associationFilterList: One or more filters. Use a filter to return a more specific list of results.  Filtering associations using the InstanceID attribute only returns legacy associations created using the InstanceID attribute. Associations targeting the managed node that are part of the Target Attributes ResourceGroup or Tags aren't returned.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listAssociations(
        associationFilterList: [AssociationFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAssociationsResult {
        let input = ListAssociationsRequest(
            associationFilterList: associationFilterList, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAssociations(input, logger: logger)
    }

    /// An invocation is copy of a command sent to a specific managed node. A command can apply to one or more managed nodes. A command invocation applies to one managed node. For example, if a user runs SendCommand against three managed nodes, then a command invocation is created for each requested managed node ID. ListCommandInvocations provide status about command execution.
    @Sendable
    @inlinable
    public func listCommandInvocations(_ input: ListCommandInvocationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCommandInvocationsResult {
        try await self.client.execute(
            operation: "ListCommandInvocations", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// An invocation is copy of a command sent to a specific managed node. A command can apply to one or more managed nodes. A command invocation applies to one managed node. For example, if a user runs SendCommand against three managed nodes, then a command invocation is created for each requested managed node ID. ListCommandInvocations provide status about command execution.
    ///
    /// Parameters:
    ///   - commandId: (Optional) The invocations for a specific command ID.
    ///   - details: (Optional) If set this returns the response of the command executions and any command output. The default value is false.
    ///   - filters: (Optional) One or more filters. Use a filter to return a more specific list of results.
    ///   - instanceId: (Optional) The command execution details for a specific managed node ID.
    ///   - maxResults: (Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: (Optional) The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listCommandInvocations(
        commandId: String? = nil,
        details: Bool? = nil,
        filters: [CommandFilter]? = nil,
        instanceId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCommandInvocationsResult {
        let input = ListCommandInvocationsRequest(
            commandId: commandId, 
            details: details, 
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCommandInvocations(input, logger: logger)
    }

    /// Lists the commands requested by users of the Amazon Web Services account.
    @Sendable
    @inlinable
    public func listCommands(_ input: ListCommandsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCommandsResult {
        try await self.client.execute(
            operation: "ListCommands", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the commands requested by users of the Amazon Web Services account.
    ///
    /// Parameters:
    ///   - commandId: (Optional) If provided, lists only the specified command.
    ///   - filters: (Optional) One or more filters. Use a filter to return a more specific list of results.
    ///   - instanceId: (Optional) Lists commands issued against this managed node ID.  You can't specify a managed node ID in the same command that you specify Status = Pending. This is because the command hasn't reached the managed node yet.
    ///   - maxResults: (Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: (Optional) The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listCommands(
        commandId: String? = nil,
        filters: [CommandFilter]? = nil,
        instanceId: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCommandsResult {
        let input = ListCommandsRequest(
            commandId: commandId, 
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listCommands(input, logger: logger)
    }

    /// For a specified resource ID, this API operation returns a list of compliance statuses for different resource types. Currently, you can only specify one resource ID per call. List results depend on the criteria specified in the filter.
    @Sendable
    @inlinable
    public func listComplianceItems(_ input: ListComplianceItemsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComplianceItemsResult {
        try await self.client.execute(
            operation: "ListComplianceItems", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// For a specified resource ID, this API operation returns a list of compliance statuses for different resource types. Currently, you can only specify one resource ID per call. List results depend on the criteria specified in the filter.
    ///
    /// Parameters:
    ///   - filters: One or more compliance filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - resourceIds: The ID for the resources from which to get compliance information. Currently, you can only specify one resource ID.
    ///   - resourceTypes: The type of resource from which to get compliance information. Currently, the only supported resource type is ManagedInstance.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComplianceItems(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceIds: [String]? = nil,
        resourceTypes: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComplianceItemsResult {
        let input = ListComplianceItemsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceIds: resourceIds, 
            resourceTypes: resourceTypes
        )
        return try await self.listComplianceItems(input, logger: logger)
    }

    /// Returns a summary count of compliant and non-compliant resources for a compliance type. For example, this call can return State Manager associations, patches, or custom compliance types according to the filter criteria that you specify.
    @Sendable
    @inlinable
    public func listComplianceSummaries(_ input: ListComplianceSummariesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListComplianceSummariesResult {
        try await self.client.execute(
            operation: "ListComplianceSummaries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a summary count of compliant and non-compliant resources for a compliance type. For example, this call can return State Manager associations, patches, or custom compliance types according to the filter criteria that you specify.
    ///
    /// Parameters:
    ///   - filters: One or more compliance or inventory filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. Currently, you can specify null or 50. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listComplianceSummaries(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListComplianceSummariesResult {
        let input = ListComplianceSummariesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listComplianceSummaries(input, logger: logger)
    }

    /// Information about approval reviews for a version of a change template in Change Manager.
    @Sendable
    @inlinable
    public func listDocumentMetadataHistory(_ input: ListDocumentMetadataHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentMetadataHistoryResponse {
        try await self.client.execute(
            operation: "ListDocumentMetadataHistory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Information about approval reviews for a version of a change template in Change Manager.
    ///
    /// Parameters:
    ///   - documentVersion: The version of the change template.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - metadata: The type of data for which details are being requested. Currently, the only supported value is DocumentReviews.
    ///   - name: The name of the change template.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocumentMetadataHistory(
        documentVersion: String? = nil,
        maxResults: Int? = nil,
        metadata: DocumentMetadataEnum,
        name: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentMetadataHistoryResponse {
        let input = ListDocumentMetadataHistoryRequest(
            documentVersion: documentVersion, 
            maxResults: maxResults, 
            metadata: metadata, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.listDocumentMetadataHistory(input, logger: logger)
    }

    /// List all versions for a document.
    @Sendable
    @inlinable
    public func listDocumentVersions(_ input: ListDocumentVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentVersionsResult {
        try await self.client.execute(
            operation: "ListDocumentVersions", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List all versions for a document.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - name: The name of the document. You can specify an Amazon Resource Name (ARN).
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocumentVersions(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentVersionsResult {
        let input = ListDocumentVersionsRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken
        )
        return try await self.listDocumentVersions(input, logger: logger)
    }

    /// Returns all Systems Manager (SSM) documents in the current Amazon Web Services account and Amazon Web Services Region. You can limit the results of this request by using a filter.
    @Sendable
    @inlinable
    public func listDocuments(_ input: ListDocumentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentsResult {
        try await self.client.execute(
            operation: "ListDocuments", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all Systems Manager (SSM) documents in the current Amazon Web Services account and Amazon Web Services Region. You can limit the results of this request by using a filter.
    ///
    /// Parameters:
    ///   - documentFilterList: This data type is deprecated. Instead, use Filters.
    ///   - filters: One or more DocumentKeyValuesFilter objects. Use a filter to return a more specific list of results. For keys, you can specify one or more key-value pair tags that have been applied to a document. Other valid keys include Owner, Name, PlatformTypes, DocumentType, and TargetType. For example, to return documents you own use Key=Owner,Values=Self. To specify a custom key-value pair, use the format Key=tag:tagName,Values=valueName.  This API operation only supports filtering documents by using a single tag key and one or more tag values. For example: Key=tag:tagName,Values=valueName1,valueName2
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocuments(
        documentFilterList: [DocumentFilter]? = nil,
        filters: [DocumentKeyValuesFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentsResult {
        let input = ListDocumentsRequest(
            documentFilterList: documentFilterList, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDocuments(input, logger: logger)
    }

    /// A list of inventory items returned by the request.
    @Sendable
    @inlinable
    public func listInventoryEntries(_ input: ListInventoryEntriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInventoryEntriesResult {
        try await self.client.execute(
            operation: "ListInventoryEntries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A list of inventory items returned by the request.
    ///
    /// Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of results.
    ///   - instanceId: The managed node ID for which you want inventory information.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - typeName: The type of inventory item for which you want information.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInventoryEntries(
        filters: [InventoryFilter]? = nil,
        instanceId: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        typeName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInventoryEntriesResult {
        let input = ListInventoryEntriesRequest(
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            typeName: typeName
        )
        return try await self.listInventoryEntries(input, logger: logger)
    }

    /// Takes in filters and returns a list of managed nodes matching the filter criteria.
    @Sendable
    @inlinable
    public func listNodes(_ input: ListNodesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListNodesResult {
        try await self.client.execute(
            operation: "ListNodes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Takes in filters and returns a list of managed nodes matching the filter criteria.
    ///
    /// Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of managed nodes.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - syncName: The name of the Amazon Web Services managed resource data sync to retrieve information about. For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is AWS-QuickSetup-ManagedNode. For single account/single-Region configurations, the parameter is not required.
    ///   - logger: Logger use during operation
    @inlinable
    public func listNodes(
        filters: [NodeFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListNodesResult {
        let input = ListNodesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            syncName: syncName
        )
        return try await self.listNodes(input, logger: logger)
    }

    /// Generates a summary of managed instance/node metadata based on the filters and aggregators you specify. Results are grouped by the input aggregator you specify.
    @Sendable
    @inlinable
    public func listNodesSummary(_ input: ListNodesSummaryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListNodesSummaryResult {
        try await self.client.execute(
            operation: "ListNodesSummary", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Generates a summary of managed instance/node metadata based on the filters and aggregators you specify. Results are grouped by the input aggregator you specify.
    ///
    /// Parameters:
    ///   - aggregators: Specify one or more aggregators to return a count of managed nodes that match that expression. For example, a count of managed nodes by operating system.
    ///   - filters: One or more filters. Use a filter to generate a summary that matches your specified filter criteria.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.) The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - syncName: The name of the Amazon Web Services managed resource data sync to retrieve information about. For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is AWS-QuickSetup-ManagedNode. For single account/single-Region configurations, the parameter is not required.
    ///   - logger: Logger use during operation
    @inlinable
    public func listNodesSummary(
        aggregators: [NodeAggregator],
        filters: [NodeFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListNodesSummaryResult {
        let input = ListNodesSummaryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            syncName: syncName
        )
        return try await self.listNodesSummary(input, logger: logger)
    }

    /// Returns a list of all OpsItem events in the current Amazon Web Services Region and Amazon Web Services account. You can limit the results to events associated with specific OpsItems by specifying a filter.
    @Sendable
    @inlinable
    public func listOpsItemEvents(_ input: ListOpsItemEventsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOpsItemEventsResponse {
        try await self.client.execute(
            operation: "ListOpsItemEvents", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all OpsItem events in the current Amazon Web Services Region and Amazon Web Services account. You can limit the results to events associated with specific OpsItems by specifying a filter.
    ///
    /// Parameters:
    ///   - filters: One or more OpsItem filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOpsItemEvents(
        filters: [OpsItemEventFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOpsItemEventsResponse {
        let input = ListOpsItemEventsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listOpsItemEvents(input, logger: logger)
    }

    /// Lists all related-item resources associated with a Systems Manager OpsCenter OpsItem. OpsCenter is a tool in Amazon Web Services Systems Manager.
    @Sendable
    @inlinable
    public func listOpsItemRelatedItems(_ input: ListOpsItemRelatedItemsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOpsItemRelatedItemsResponse {
        try await self.client.execute(
            operation: "ListOpsItemRelatedItems", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all related-item resources associated with a Systems Manager OpsCenter OpsItem. OpsCenter is a tool in Amazon Web Services Systems Manager.
    ///
    /// Parameters:
    ///   - filters: One or more OpsItem filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: The token for the next set of items to return. (You received this token from a previous call.)
    ///   - opsItemId: The ID of the OpsItem for which you want to list all related-item resources.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOpsItemRelatedItems(
        filters: [OpsItemRelatedItemsFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        opsItemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOpsItemRelatedItemsResponse {
        let input = ListOpsItemRelatedItemsRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            opsItemId: opsItemId
        )
        return try await self.listOpsItemRelatedItems(input, logger: logger)
    }

    /// Amazon Web Services Systems Manager calls this API operation when displaying all Application Manager OpsMetadata objects or blobs.
    @Sendable
    @inlinable
    public func listOpsMetadata(_ input: ListOpsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOpsMetadataResult {
        try await self.client.execute(
            operation: "ListOpsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Amazon Web Services Systems Manager calls this API operation when displaying all Application Manager OpsMetadata objects or blobs.
    ///
    /// Parameters:
    ///   - filters: One or more filters to limit the number of OpsMetadata objects returned by the call.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOpsMetadata(
        filters: [OpsMetadataFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOpsMetadataResult {
        let input = ListOpsMetadataRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listOpsMetadata(input, logger: logger)
    }

    /// Returns a resource-level summary count. The summary includes information about compliant and non-compliant statuses and detailed compliance-item severity counts, according to the filter criteria you specify.
    @Sendable
    @inlinable
    public func listResourceComplianceSummaries(_ input: ListResourceComplianceSummariesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListResourceComplianceSummariesResult {
        try await self.client.execute(
            operation: "ListResourceComplianceSummaries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a resource-level summary count. The summary includes information about compliant and non-compliant statuses and detailed compliance-item severity counts, according to the filter criteria you specify.
    ///
    /// Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listResourceComplianceSummaries(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListResourceComplianceSummariesResult {
        let input = ListResourceComplianceSummariesRequest(
            filters: filters, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listResourceComplianceSummaries(input, logger: logger)
    }

    /// Lists your resource data sync configurations. Includes information about the last time a sync attempted to start, the last sync status, and the last time a sync successfully completed. The number of sync configurations might be too large to return using a single call to ListResourceDataSync. You can limit the number of sync configurations returned by using the MaxResults parameter. To determine whether there are more sync configurations to list, check the value of NextToken in the output. If there are more sync configurations to list, you can request them by specifying the NextToken returned in the call to the parameter of a subsequent call.
    @Sendable
    @inlinable
    public func listResourceDataSync(_ input: ListResourceDataSyncRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListResourceDataSyncResult {
        try await self.client.execute(
            operation: "ListResourceDataSync", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists your resource data sync configurations. Includes information about the last time a sync attempted to start, the last sync status, and the last time a sync successfully completed. The number of sync configurations might be too large to return using a single call to ListResourceDataSync. You can limit the number of sync configurations returned by using the MaxResults parameter. To determine whether there are more sync configurations to list, check the value of NextToken in the output. If there are more sync configurations to list, you can request them by specifying the NextToken returned in the call to the parameter of a subsequent call.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - nextToken: A token to start the list. Use this token to get the next set of results.
    ///   - syncType: View a list of resource data syncs according to the sync type. Specify SyncToDestination to view resource data syncs that synchronize data to an Amazon S3 bucket. Specify SyncFromSource to view resource data syncs from Organizations or from multiple Amazon Web Services Regions.
    ///   - logger: Logger use during operation
    @inlinable
    public func listResourceDataSync(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        syncType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListResourceDataSyncResult {
        let input = ListResourceDataSyncRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            syncType: syncType
        )
        return try await self.listResourceDataSync(input, logger: logger)
    }

    /// Returns a list of the tags assigned to the specified resource. For information about the ID format for each supported resource type, see AddTagsToResource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResult {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of the tags assigned to the specified resource. For information about the ID format for each supported resource type, see AddTagsToResource.
    ///
    /// Parameters:
    ///   - resourceId: The resource ID for which you want to see a list of tags.
    ///   - resourceType: Returns a list of tags for a specific resource type.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceId: String,
        resourceType: ResourceTypeForTagging,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResult {
        let input = ListTagsForResourceRequest(
            resourceId: resourceId, 
            resourceType: resourceType
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Shares a Amazon Web Services Systems Manager document (SSM document)publicly or privately. If you share a document privately, you must specify the Amazon Web Services user IDs for those people who can use the document. If you share a document publicly, you must specify All as the account ID.
    @Sendable
    @inlinable
    public func modifyDocumentPermission(_ input: ModifyDocumentPermissionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ModifyDocumentPermissionResponse {
        try await self.client.execute(
            operation: "ModifyDocumentPermission", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Shares a Amazon Web Services Systems Manager document (SSM document)publicly or privately. If you share a document privately, you must specify the Amazon Web Services user IDs for those people who can use the document. If you share a document publicly, you must specify All as the account ID.
    ///
    /// Parameters:
    ///   - accountIdsToAdd: The Amazon Web Services users that should have access to the document. The account IDs can either be a group of account IDs or All. You must specify a value for this parameter or the AccountIdsToRemove parameter.
    ///   - accountIdsToRemove: The Amazon Web Services users that should no longer have access to the document. The Amazon Web Services user can either be a group of account IDs or All. This action has a higher priority than AccountIdsToAdd. If you specify an ID to add and the same ID to remove, the system removes access to the document. You must specify a value for this parameter or the AccountIdsToAdd parameter.
    ///   - name: The name of the document that you want to share.
    ///   - permissionType: The permission type for the document. The permission type can be Share.
    ///   - sharedDocumentVersion: (Optional) The version of the document to share. If it isn't specified, the system choose the Default version to share.
    ///   - logger: Logger use during operation
    @inlinable
    public func modifyDocumentPermission(
        accountIdsToAdd: [String]? = nil,
        accountIdsToRemove: [String]? = nil,
        name: String,
        permissionType: DocumentPermissionType,
        sharedDocumentVersion: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ModifyDocumentPermissionResponse {
        let input = ModifyDocumentPermissionRequest(
            accountIdsToAdd: accountIdsToAdd, 
            accountIdsToRemove: accountIdsToRemove, 
            name: name, 
            permissionType: permissionType, 
            sharedDocumentVersion: sharedDocumentVersion
        )
        return try await self.modifyDocumentPermission(input, logger: logger)
    }

    /// Registers a compliance type and other compliance details on a designated resource. This operation lets you register custom compliance details with a resource. This call overwrites existing compliance information on the resource, so you must provide a full list of compliance items each time that you send the request. ComplianceType can be one of the following:   ExecutionId: The execution ID when the patch, association, or custom compliance item was applied.   ExecutionType: Specify patch, association, or Custom:string.   ExecutionTime. The time the patch, association, or custom compliance item was applied to the managed node.  For State Manager associations, this represents the time when compliance status was captured by the Systems Manager service during its internal compliance aggregation workflow, not necessarily when the association was executed on the managed node. State Manager updates compliance information for all associations on an instance whenever any association executes, which may result in multiple associations showing the same execution time.    Id: The patch, association, or custom compliance ID.   Title: A title.   Status: The status of the compliance item. For example, approved for patches, or Failed for associations.   Severity: A patch severity. For example, Critical.   DocumentName: An SSM document name. For example, AWS-RunPatchBaseline.   DocumentVersion: An SSM document version number. For example, 4.   Classification: A patch classification. For example, security updates.   PatchBaselineId: A patch baseline ID.   PatchSeverity: A patch severity. For example, Critical.   PatchState: A patch state. For example, InstancesWithFailedPatches.   PatchGroup: The name of a patch group.   InstalledTime: The time the association, patch, or custom compliance item was applied to the resource. Specify the time by using the following format: yyyy-MM-dd'T'HH:mm:ss'Z'
    @Sendable
    @inlinable
    public func putComplianceItems(_ input: PutComplianceItemsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutComplianceItemsResult {
        try await self.client.execute(
            operation: "PutComplianceItems", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers a compliance type and other compliance details on a designated resource. This operation lets you register custom compliance details with a resource. This call overwrites existing compliance information on the resource, so you must provide a full list of compliance items each time that you send the request. ComplianceType can be one of the following:   ExecutionId: The execution ID when the patch, association, or custom compliance item was applied.   ExecutionType: Specify patch, association, or Custom:string.   ExecutionTime. The time the patch, association, or custom compliance item was applied to the managed node.  For State Manager associations, this represents the time when compliance status was captured by the Systems Manager service during its internal compliance aggregation workflow, not necessarily when the association was executed on the managed node. State Manager updates compliance information for all associations on an instance whenever any association executes, which may result in multiple associations showing the same execution time.    Id: The patch, association, or custom compliance ID.   Title: A title.   Status: The status of the compliance item. For example, approved for patches, or Failed for associations.   Severity: A patch severity. For example, Critical.   DocumentName: An SSM document name. For example, AWS-RunPatchBaseline.   DocumentVersion: An SSM document version number. For example, 4.   Classification: A patch classification. For example, security updates.   PatchBaselineId: A patch baseline ID.   PatchSeverity: A patch severity. For example, Critical.   PatchState: A patch state. For example, InstancesWithFailedPatches.   PatchGroup: The name of a patch group.   InstalledTime: The time the association, patch, or custom compliance item was applied to the resource. Specify the time by using the following format: yyyy-MM-dd'T'HH:mm:ss'Z'
    ///
    /// Parameters:
    ///   - complianceType: Specify the compliance type. For example, specify Association (for a State Manager association), Patch, or Custom:string.
    ///   - executionSummary: A summary of the call execution that includes an execution ID, the type of execution (for example, Command), and the date/time of the execution using a datetime object that is saved in the following format: yyyy-MM-dd'T'HH:mm:ss'Z'
    ///   - itemContentHash: MD5 or SHA-256 content hash. The content hash is used to determine if existing information should be overwritten or ignored. If the content hashes match, the request to put compliance information is ignored.
    ///   - items: Information about the compliance as defined by the resource type. For example, for a patch compliance type, Items includes information about the PatchSeverity, Classification, and so on.
    ///   - resourceId: Specify an ID for this resource. For a managed node, this is the node ID.
    ///   - resourceType: Specify the type of resource. ManagedInstance is currently the only supported resource type.
    ///   - uploadType: The mode for uploading compliance items. You can specify COMPLETE or PARTIAL. In COMPLETE mode, the system overwrites all existing compliance information for the resource. You must provide a full list of compliance items each time you send the request. In PARTIAL mode, the system overwrites compliance information for a specific association. The association must be configured with SyncCompliance set to MANUAL. By default, all requests use COMPLETE mode.  This attribute is only valid for association compliance.
    ///   - logger: Logger use during operation
    @inlinable
    public func putComplianceItems(
        complianceType: String,
        executionSummary: ComplianceExecutionSummary,
        itemContentHash: String? = nil,
        items: [ComplianceItemEntry],
        resourceId: String,
        resourceType: String,
        uploadType: ComplianceUploadType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutComplianceItemsResult {
        let input = PutComplianceItemsRequest(
            complianceType: complianceType, 
            executionSummary: executionSummary, 
            itemContentHash: itemContentHash, 
            items: items, 
            resourceId: resourceId, 
            resourceType: resourceType, 
            uploadType: uploadType
        )
        return try await self.putComplianceItems(input, logger: logger)
    }

    /// Bulk update custom inventory items on one or more managed nodes. The request adds an inventory item, if it doesn't already exist, or updates an inventory item, if it does exist.
    @Sendable
    @inlinable
    public func putInventory(_ input: PutInventoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutInventoryResult {
        try await self.client.execute(
            operation: "PutInventory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Bulk update custom inventory items on one or more managed nodes. The request adds an inventory item, if it doesn't already exist, or updates an inventory item, if it does exist.
    ///
    /// Parameters:
    ///   - instanceId: An managed node ID where you want to add or update inventory items.
    ///   - items: The inventory items that you want to add or update on managed nodes.
    ///   - logger: Logger use during operation
    @inlinable
    public func putInventory(
        instanceId: String,
        items: [InventoryItem],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutInventoryResult {
        let input = PutInventoryRequest(
            instanceId: instanceId, 
            items: items
        )
        return try await self.putInventory(input, logger: logger)
    }

    /// Create or update a parameter in Parameter Store.
    @Sendable
    @inlinable
    public func putParameter(_ input: PutParameterRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutParameterResult {
        try await self.client.execute(
            operation: "PutParameter", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Create or update a parameter in Parameter Store.
    ///
    /// Parameters:
    ///   - allowedPattern: A regular expression used to validate the parameter value. For example, for String types with values restricted to numbers, you can specify the following: AllowedPattern=^\d+$
    ///   - dataType: The data type for a String parameter. Supported data types include plain text and Amazon Machine Image (AMI) IDs.  The following data type values are supported.     text     aws:ec2:image     aws:ssm:integration    When you create a String parameter and specify aws:ec2:image, Amazon Web Services Systems Manager validates the parameter value is in the required format, such as ami-12345abcdeEXAMPLE, and that the specified AMI is available in your Amazon Web Services account.  If the action is successful, the service sends back an HTTP 200 response which indicates a successful PutParameter call for all cases except for data type aws:ec2:image. If you call PutParameter with aws:ec2:image data type, a successful HTTP 200 response does not guarantee that your parameter was successfully created or updated. The aws:ec2:image value is validated asynchronously, and the PutParameter call returns before the validation is complete. If you submit an invalid AMI value, the PutParameter operation will return success, but the asynchronous validation will fail and the parameter will not be created or updated. To monitor whether your aws:ec2:image parameters are created successfully, see Setting up notifications or trigger actions based on Parameter Store events. For more information about AMI format validation , see Native parameter support for Amazon Machine Image IDs.
    ///   - description: Information about the parameter that you want to add to the system. Optional but recommended.  Don't enter personally identifiable information in this field.
    ///   - keyId: The Key Management Service (KMS) ID that you want to use to encrypt a parameter. Use a custom key for better security. Required for parameters that use the SecureString data type. If you don't specify a key ID, the system uses the default key associated with your Amazon Web Services account, which is not as secure as using a custom key.   To use a custom KMS key, choose the SecureString data type with the Key ID parameter.
    ///   - name: The fully qualified name of the parameter that you want to create or update.  You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.  The fully qualified name includes the complete hierarchy of the parameter path and name. For parameters in a hierarchy, you must include a leading forward slash character (/) when you create or reference a parameter. For example: /Dev/DBServer/MySQL/db-string13  Naming Constraints:   Parameter names are case sensitive.   A parameter name must be unique within an Amazon Web Services Region   A parameter name can't be prefixed with "aws" or "ssm" (case-insensitive).   Parameter names can include only the following symbols and letters: a-zA-Z0-9_.-  In addition, the slash character ( / ) is used to delineate hierarchies in parameter names. For example: /Dev/Production/East/Project-ABC/MyParameter    Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.   Parameter hierarchies are limited to a maximum depth of fifteen levels.   For additional information about valid values for parameter names, see Creating Systems Manager parameters in the Amazon Web Services Systems Manager User Guide.  The reported maximum length of 2048 characters for a parameter name includes 1037 characters that are reserved for internal use by Systems Manager. The maximum length for a parameter name that you specify is 1011 characters. This count of 1011 characters includes the characters in the ARN that precede the name you specify. This ARN length will vary depending on your partition and Region. For example, the following 45 characters count toward the 1011 character maximum for a parameter created in the US East (Ohio) Region: arn:aws:ssm:us-east-2:111122223333:parameter/.
    ///   - overwrite: Overwrite an existing parameter. The default value is false.
    ///   - policies: One or more policies to apply to a parameter. This operation takes a JSON array. Parameter Store, a tool in Amazon Web Services Systems Manager supports the following policy types: Expiration: This policy deletes the parameter after it expires. When you create the policy, you specify the expiration date. You can update the expiration date and time by updating the policy. Updating the parameter doesn't affect the expiration date and time. When the expiration time is reached, Parameter Store deletes the parameter. ExpirationNotification: This policy initiates an event in Amazon CloudWatch Events that notifies you about the expiration. By using this policy, you can receive notification before or after the expiration time is reached, in units of days or hours. NoChangeNotification: This policy initiates a CloudWatch Events event if a parameter hasn't been modified for a specified period of time. This policy type is useful when, for example, a secret needs to be changed within a period of time, but it hasn't been changed. All existing policies are preserved until you send new policies or an empty policy. For more information about parameter policies, see Assigning parameter policies.
    ///   - tags: Optional metadata that you assign to a resource. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a Systems Manager parameter to identify the type of resource to which it applies, the environment, or the type of configuration data referenced by the parameter. In this case, you could specify the following key-value pairs:    Key=Resource,Value=S3bucket     Key=OS,Value=Windows     Key=ParameterType,Value=LicenseKey     To add tags to an existing Systems Manager parameter, use the AddTagsToResource operation.
    ///   - tier: The parameter tier to assign to a parameter. Parameter Store offers a standard tier and an advanced tier for parameters. Standard parameters have a content size limit of 4 KB and can't be configured to use parameter policies. You can create a maximum of 10,000 standard parameters for each Region in an Amazon Web Services account. Standard parameters are offered at no additional cost.  Advanced parameters have a content size limit of 8 KB and can be configured to use parameter policies. You can create a maximum of 100,000 advanced parameters for each Region in an Amazon Web Services account. Advanced parameters incur a charge. For more information, see Managing parameter tiers in the Amazon Web Services Systems Manager User Guide. You can change a standard parameter to an advanced parameter any time. But you can't revert an advanced parameter to a standard parameter. Reverting an advanced parameter to a standard parameter would result in data loss because the system would truncate the size of the parameter from 8 KB to 4 KB. Reverting would also remove any policies attached to the parameter. Lastly, advanced parameters use a different form of encryption than standard parameters.  If you no longer need an advanced parameter, or if you no longer want to incur charges for an advanced parameter, you must delete it and recreate it as a new standard parameter.   Using the Default Tier Configuration  In PutParameter requests, you can specify the tier to create the parameter in. Whenever you specify a tier in the request, Parameter Store creates or updates the parameter according to that request. However, if you don't specify a tier in a request, Parameter Store assigns the tier based on the current Parameter Store default tier configuration. The default tier when you begin using Parameter Store is the standard-parameter tier. If you use the advanced-parameter tier, you can specify one of the following as the default:    Advanced: With this option, Parameter Store evaluates all requests as advanced parameters.     Intelligent-Tiering: With this option, Parameter Store evaluates each request to determine if the parameter is standard or advanced.  If the request doesn't include any options that require an advanced parameter, the parameter is created in the standard-parameter tier. If one or more options requiring an advanced parameter are included in the request, Parameter Store create a parameter in the advanced-parameter tier. This approach helps control your parameter-related costs by always creating standard parameters unless an advanced parameter is necessary.    Options that require an advanced parameter include the following:   The content size of the parameter is more than 4 KB.   The parameter uses a parameter policy.   More than 10,000 parameters already exist in your Amazon Web Services account in the current Amazon Web Services Region.   For more information about configuring the default tier option, see Specifying a default parameter tier in the Amazon Web Services Systems Manager User Guide.
    ///   - type: The type of parameter that you want to create.   SecureString isn't currently supported for CloudFormation templates.  Items in a StringList must be separated by a comma (,). You can't use other punctuation or special character to escape items in the list. If you have a parameter value that requires a comma, then use the String data type.  Specifying a parameter type isn't required when updating a parameter. You must specify a parameter type when creating a parameter.
    ///   - value: The parameter value that you want to add to the system. Standard parameters have a value limit of 4 KB. Advanced parameters have a value limit of 8 KB.  Parameters can't be referenced or nested in the values of other parameters. You can't include values wrapped in double brackets {{}} or {{ssm:parameter-name}} in a parameter value.
    ///   - logger: Logger use during operation
    @inlinable
    public func putParameter(
        allowedPattern: String? = nil,
        dataType: String? = nil,
        description: String? = nil,
        keyId: String? = nil,
        name: String,
        overwrite: Bool? = nil,
        policies: String? = nil,
        tags: [Tag]? = nil,
        tier: ParameterTier? = nil,
        type: ParameterType? = nil,
        value: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutParameterResult {
        let input = PutParameterRequest(
            allowedPattern: allowedPattern, 
            dataType: dataType, 
            description: description, 
            keyId: keyId, 
            name: name, 
            overwrite: overwrite, 
            policies: policies, 
            tags: tags, 
            tier: tier, 
            type: type, 
            value: value
        )
        return try await self.putParameter(input, logger: logger)
    }

    /// Creates or updates a Systems Manager resource policy. A resource policy helps you to define the IAM entity (for example, an Amazon Web Services account) that can manage your Systems Manager resources. The following resources support Systems Manager resource policies.    OpsItemGroup - The resource policy for OpsItemGroup enables Amazon Web Services accounts to view and interact with OpsCenter operational work items (OpsItems).    Parameter - The resource policy is used to share a parameter with other accounts using Resource Access Manager (RAM).  To share a parameter, it must be in the advanced parameter tier. For information about parameter tiers, see Managing parameter tiers. For information about changing an existing standard parameter to an advanced parameter, see Changing a standard parameter to an advanced parameter. To share a SecureString parameter, it must be encrypted with a customer managed key, and you must share the key separately through Key Management Service. Amazon Web Services managed keys cannot be shared. Parameters encrypted with the default Amazon Web Services managed key can be updated to use a customer managed key instead. For KMS key definitions, see KMS concepts in the Key Management Service Developer Guide.  While you can share a parameter using the Systems Manager PutResourcePolicy operation, we recommend using Resource Access Manager (RAM) instead. This is because using PutResourcePolicy requires the extra step of promoting the parameter to a standard RAM Resource Share using the RAM PromoteResourceShareCreatedFromPolicy API operation. Otherwise, the parameter won't be returned by the Systems Manager DescribeParameters API operation using the --shared option. For more information, see Sharing a parameter in the Amazon Web Services Systems Manager User Guide
    @Sendable
    @inlinable
    public func putResourcePolicy(_ input: PutResourcePolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutResourcePolicyResponse {
        try await self.client.execute(
            operation: "PutResourcePolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates a Systems Manager resource policy. A resource policy helps you to define the IAM entity (for example, an Amazon Web Services account) that can manage your Systems Manager resources. The following resources support Systems Manager resource policies.    OpsItemGroup - The resource policy for OpsItemGroup enables Amazon Web Services accounts to view and interact with OpsCenter operational work items (OpsItems).    Parameter - The resource policy is used to share a parameter with other accounts using Resource Access Manager (RAM).  To share a parameter, it must be in the advanced parameter tier. For information about parameter tiers, see Managing parameter tiers. For information about changing an existing standard parameter to an advanced parameter, see Changing a standard parameter to an advanced parameter. To share a SecureString parameter, it must be encrypted with a customer managed key, and you must share the key separately through Key Management Service. Amazon Web Services managed keys cannot be shared. Parameters encrypted with the default Amazon Web Services managed key can be updated to use a customer managed key instead. For KMS key definitions, see KMS concepts in the Key Management Service Developer Guide.  While you can share a parameter using the Systems Manager PutResourcePolicy operation, we recommend using Resource Access Manager (RAM) instead. This is because using PutResourcePolicy requires the extra step of promoting the parameter to a standard RAM Resource Share using the RAM PromoteResourceShareCreatedFromPolicy API operation. Otherwise, the parameter won't be returned by the Systems Manager DescribeParameters API operation using the --shared option. For more information, see Sharing a parameter in the Amazon Web Services Systems Manager User Guide
    ///
    /// Parameters:
    ///   - policy: A policy you want to associate with a resource.
    ///   - policyHash: ID of the current policy version. The hash helps to prevent a situation where multiple users attempt to overwrite a policy. You must provide this hash when updating or deleting a policy.
    ///   - policyId: The policy ID.
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource to which you want to attach a policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func putResourcePolicy(
        policy: String,
        policyHash: String? = nil,
        policyId: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutResourcePolicyResponse {
        let input = PutResourcePolicyRequest(
            policy: policy, 
            policyHash: policyHash, 
            policyId: policyId, 
            resourceArn: resourceArn
        )
        return try await self.putResourcePolicy(input, logger: logger)
    }

    /// Defines the default patch baseline for the relevant operating system. To reset the Amazon Web Services-predefined patch baseline as the default, specify the full patch baseline Amazon Resource Name (ARN) as the baseline ID value. For example, for CentOS, specify arn:aws:ssm:us-east-2:733109147000:patchbaseline/pb-0574b43a65ea646ed instead of pb-0574b43a65ea646ed.
    @Sendable
    @inlinable
    public func registerDefaultPatchBaseline(_ input: RegisterDefaultPatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterDefaultPatchBaselineResult {
        try await self.client.execute(
            operation: "RegisterDefaultPatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Defines the default patch baseline for the relevant operating system. To reset the Amazon Web Services-predefined patch baseline as the default, specify the full patch baseline Amazon Resource Name (ARN) as the baseline ID value. For example, for CentOS, specify arn:aws:ssm:us-east-2:733109147000:patchbaseline/pb-0574b43a65ea646ed instead of pb-0574b43a65ea646ed.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline that should be the default patch baseline.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerDefaultPatchBaseline(
        baselineId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterDefaultPatchBaselineResult {
        let input = RegisterDefaultPatchBaselineRequest(
            baselineId: baselineId
        )
        return try await self.registerDefaultPatchBaseline(input, logger: logger)
    }

    /// Registers a patch baseline for a patch group.
    @Sendable
    @inlinable
    public func registerPatchBaselineForPatchGroup(_ input: RegisterPatchBaselineForPatchGroupRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterPatchBaselineForPatchGroupResult {
        try await self.client.execute(
            operation: "RegisterPatchBaselineForPatchGroup", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers a patch baseline for a patch group.
    ///
    /// Parameters:
    ///   - baselineId: The ID of the patch baseline to register with the patch group.
    ///   - patchGroup: The name of the patch group to be registered with the patch baseline.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerPatchBaselineForPatchGroup(
        baselineId: String,
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterPatchBaselineForPatchGroupResult {
        let input = RegisterPatchBaselineForPatchGroupRequest(
            baselineId: baselineId, 
            patchGroup: patchGroup
        )
        return try await self.registerPatchBaselineForPatchGroup(input, logger: logger)
    }

    /// Registers a target with a maintenance window.
    @Sendable
    @inlinable
    public func registerTargetWithMaintenanceWindow(_ input: RegisterTargetWithMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterTargetWithMaintenanceWindowResult {
        try await self.client.execute(
            operation: "RegisterTargetWithMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers a target with a maintenance window.
    ///
    /// Parameters:
    ///   - clientToken: User-provided idempotency token.
    ///   - description: An optional description for the target.
    ///   - name: An optional name for the target.
    ///   - ownerInformation: User-provided value that will be included in any Amazon CloudWatch Events events raised while running tasks for these targets in this maintenance window.
    ///   - resourceType: The type of target being registered with the maintenance window.
    ///   - targets: The targets to register with the maintenance window. In other words, the managed nodes to run commands on when the maintenance window runs.  If a single maintenance window task is registered with multiple targets, its task invocations occur sequentially and not in parallel. If your task must run on multiple targets at the same time, register a task for each target individually and assign each task the same priority level.  You can specify targets using managed node IDs, resource group names, or tags that have been applied to managed nodes.  Example 1: Specify managed node IDs  Key=InstanceIds,Values=,,   Example 2: Use tag key-pairs applied to managed nodes  Key=tag:,Values=,   Example 3: Use tag-keys applied to managed nodes  Key=tag-key,Values=,   Example 4: Use resource group names  Key=resource-groups:Name,Values=   Example 5: Use filters for resource group types  Key=resource-groups:ResourceTypeFilters,Values=,   For Key=resource-groups:ResourceTypeFilters, specify resource types in the following format  Key=resource-groups:ResourceTypeFilters,Values=AWS::EC2::INSTANCE,AWS::EC2::VPC   For more information about these examples formats, including the best use case for each one, see Examples: Register targets with a maintenance window in the Amazon Web Services Systems Manager User Guide.
    ///   - windowId: The ID of the maintenance window the target should be registered with.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerTargetWithMaintenanceWindow(
        clientToken: String? = RegisterTargetWithMaintenanceWindowRequest.idempotencyToken(),
        description: String? = nil,
        name: String? = nil,
        ownerInformation: String? = nil,
        resourceType: MaintenanceWindowResourceType,
        targets: [Target],
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterTargetWithMaintenanceWindowResult {
        let input = RegisterTargetWithMaintenanceWindowRequest(
            clientToken: clientToken, 
            description: description, 
            name: name, 
            ownerInformation: ownerInformation, 
            resourceType: resourceType, 
            targets: targets, 
            windowId: windowId
        )
        return try await self.registerTargetWithMaintenanceWindow(input, logger: logger)
    }

    /// Adds a new task to a maintenance window.
    @Sendable
    @inlinable
    public func registerTaskWithMaintenanceWindow(_ input: RegisterTaskWithMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterTaskWithMaintenanceWindowResult {
        try await self.client.execute(
            operation: "RegisterTaskWithMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a new task to a maintenance window.
    ///
    /// Parameters:
    ///   - alarmConfiguration: The CloudWatch alarm you want to apply to your maintenance window task.
    ///   - clientToken: User-provided idempotency token.
    ///   - cutoffBehavior: Indicates whether tasks should continue to run after the cutoff time specified in the maintenance windows is reached.     CONTINUE_TASK: When the cutoff time is reached, any tasks that are running continue. The default value.    CANCEL_TASK:   For Automation, Lambda, Step Functions tasks: When the cutoff time is reached, any task invocations that are already running continue, but no new task invocations are started.   For Run Command tasks: When the cutoff time is reached, the system sends a CancelCommand operation that attempts to cancel the command associated with the task. However, there is no guarantee that the command will be terminated and the underlying process stopped.   The status for tasks that are not completed is TIMED_OUT.
    ///   - description: An optional description for the task.
    ///   - loggingInfo: A structure containing information about an Amazon Simple Storage Service (Amazon S3) bucket to write managed node-level logs to.    LoggingInfo has been deprecated. To specify an Amazon Simple Storage Service (Amazon S3) bucket to contain logs, instead use the OutputS3BucketName and OutputS3KeyPrefix options in the TaskInvocationParameters structure. For information about how Amazon Web Services Systems Manager handles these options for the supported maintenance window task types, see MaintenanceWindowTaskInvocationParameters.
    ///   - maxConcurrency: The maximum number of targets this task can be run for, in parallel.  Although this element is listed as "Required: No", a value can be omitted only when you are registering or updating a targetless task You must provide a value in all other cases. For maintenance window tasks without a target specified, you can't supply a value for this option. Instead, the system inserts a placeholder value of 1. This value doesn't affect the running of your task.
    ///   - maxErrors: The maximum number of errors allowed before this task stops being scheduled.  Although this element is listed as "Required: No", a value can be omitted only when you are registering or updating a targetless task You must provide a value in all other cases. For maintenance window tasks without a target specified, you can't supply a value for this option. Instead, the system inserts a placeholder value of 1. This value doesn't affect the running of your task.
    ///   - name: An optional name for the task.
    ///   - priority: The priority of the task in the maintenance window, the lower the number the higher the priority. Tasks in a maintenance window are scheduled in priority order with tasks that have the same priority scheduled in parallel.
    ///   - serviceRoleArn: The Amazon Resource Name (ARN) of the IAM service role for Amazon Web Services Systems Manager to assume when running a maintenance window task. If you do not specify a service role ARN, Systems Manager uses a service-linked role in your account. If no appropriate service-linked role for Systems Manager exists in your account, it is created when you run RegisterTaskWithMaintenanceWindow. However, for an improved security posture, we strongly recommend creating a custom policy and custom service role for running your maintenance window tasks. The policy can be crafted to provide only the permissions needed for your particular maintenance window tasks. For more information, see Setting up Maintenance Windows in the in the Amazon Web Services Systems Manager User Guide.
    ///   - targets: The targets (either managed nodes or maintenance window targets).  One or more targets must be specified for maintenance window Run Command-type tasks. Depending on the task, targets are optional for other maintenance window task types (Automation, Lambda, and Step Functions). For more information about running tasks that don't specify targets, see Registering maintenance window tasks without targets in the Amazon Web Services Systems Manager User Guide.  Specify managed nodes using the following format:   Key=InstanceIds,Values=,  Specify maintenance window targets using the following format:  Key=WindowTargetIds,Values=,
    ///   - taskArn: The ARN of the task to run.
    ///   - taskInvocationParameters: The parameters that the task should use during execution. Populate only the fields that match the task type. All other fields should be empty.
    ///   - taskParameters: The parameters that should be passed to the task when it is run.   TaskParameters has been deprecated. To specify parameters to pass to a task when it runs, instead use the Parameters option in the TaskInvocationParameters structure. For information about how Systems Manager handles these options for the supported maintenance window task types, see MaintenanceWindowTaskInvocationParameters.
    ///   - taskType: The type of task being registered.
    ///   - windowId: The ID of the maintenance window the task should be added to.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerTaskWithMaintenanceWindow(
        alarmConfiguration: AlarmConfiguration? = nil,
        clientToken: String? = RegisterTaskWithMaintenanceWindowRequest.idempotencyToken(),
        cutoffBehavior: MaintenanceWindowTaskCutoffBehavior? = nil,
        description: String? = nil,
        loggingInfo: LoggingInfo? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        name: String? = nil,
        priority: Int? = nil,
        serviceRoleArn: String? = nil,
        targets: [Target]? = nil,
        taskArn: String,
        taskInvocationParameters: MaintenanceWindowTaskInvocationParameters? = nil,
        taskParameters: [String: MaintenanceWindowTaskParameterValueExpression]? = nil,
        taskType: MaintenanceWindowTaskType,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterTaskWithMaintenanceWindowResult {
        let input = RegisterTaskWithMaintenanceWindowRequest(
            alarmConfiguration: alarmConfiguration, 
            clientToken: clientToken, 
            cutoffBehavior: cutoffBehavior, 
            description: description, 
            loggingInfo: loggingInfo, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            name: name, 
            priority: priority, 
            serviceRoleArn: serviceRoleArn, 
            targets: targets, 
            taskArn: taskArn, 
            taskInvocationParameters: taskInvocationParameters, 
            taskParameters: taskParameters, 
            taskType: taskType, 
            windowId: windowId
        )
        return try await self.registerTaskWithMaintenanceWindow(input, logger: logger)
    }

    /// Removes tag keys from the specified resource.
    @Sendable
    @inlinable
    public func removeTagsFromResource(_ input: RemoveTagsFromResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RemoveTagsFromResourceResult {
        try await self.client.execute(
            operation: "RemoveTagsFromResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes tag keys from the specified resource.
    ///
    /// Parameters:
    ///   - resourceId: The ID of the resource from which you want to remove tags. For example: ManagedInstance: mi-012345abcde MaintenanceWindow: mw-012345abcde  Automation: example-c160-4567-8519-012345abcde  PatchBaseline: pb-012345abcde OpsMetadata object: ResourceID for tagging is created from the Amazon Resource Name (ARN) for the object. Specifically, ResourceID is created from the strings that come after the word opsmetadata in the ARN. For example, an OpsMetadata object with an ARN of arn:aws:ssm:us-east-2:1234567890:opsmetadata/aws/ssm/MyGroup/appmanager has a ResourceID of either aws/ssm/MyGroup/appmanager or /aws/ssm/MyGroup/appmanager. For the Document and Parameter values, use the name of the resource.  The ManagedInstance type for this API operation is only for on-premises managed nodes. Specify the name of the managed node in the following format: mi-ID_number. For example, mi-1a2b3c4d5e6f.
    ///   - resourceType: The type of resource from which you want to remove a tag.  The ManagedInstance type for this API operation is only for on-premises managed nodes. Specify the name of the managed node in the following format: mi-ID_number . For example, mi-1a2b3c4d5e6f.
    ///   - tagKeys: Tag keys that you want to remove from the specified resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeTagsFromResource(
        resourceId: String,
        resourceType: ResourceTypeForTagging,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RemoveTagsFromResourceResult {
        let input = RemoveTagsFromResourceRequest(
            resourceId: resourceId, 
            resourceType: resourceType, 
            tagKeys: tagKeys
        )
        return try await self.removeTagsFromResource(input, logger: logger)
    }

    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of "false". This means the user can't use this feature unless they change the setting to "true" and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the GetServiceSetting API operation to view the current value. Use the UpdateServiceSetting API operation to change the default setting.  Reset the service setting for the account to the default value as provisioned by the Amazon Web Services service team.
    @Sendable
    @inlinable
    public func resetServiceSetting(_ input: ResetServiceSettingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ResetServiceSettingResult {
        try await self.client.execute(
            operation: "ResetServiceSetting", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of "false". This means the user can't use this feature unless they change the setting to "true" and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the GetServiceSetting API operation to view the current value. Use the UpdateServiceSetting API operation to change the default setting.  Reset the service setting for the account to the default value as provisioned by the Amazon Web Services service team.
    ///
    /// Parameters:
    ///   - settingId: The Amazon Resource Name (ARN) of the service setting to reset. The setting ID can be one of the following.    /ssm/appmanager/appmanager-enabled     /ssm/automation/customer-script-log-destination     /ssm/automation/customer-script-log-group-name    /ssm/automation/enable-adaptive-concurrency    /ssm/documents/console/public-sharing-permission     /ssm/managed-instance/activation-tier     /ssm/managed-instance/default-ec2-instance-management-role     /ssm/opsinsights/opscenter     /ssm/parameter-store/default-parameter-tier     /ssm/parameter-store/high-throughput-enabled
    ///   - logger: Logger use during operation
    @inlinable
    public func resetServiceSetting(
        settingId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ResetServiceSettingResult {
        let input = ResetServiceSettingRequest(
            settingId: settingId
        )
        return try await self.resetServiceSetting(input, logger: logger)
    }

    /// Reconnects a session to a managed node after it has been disconnected. Connections can be resumed for disconnected sessions, but not terminated sessions.  This command is primarily for use by client machines to automatically reconnect during intermittent network issues. It isn't intended for any other use.
    @Sendable
    @inlinable
    public func resumeSession(_ input: ResumeSessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ResumeSessionResponse {
        try await self.client.execute(
            operation: "ResumeSession", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Reconnects a session to a managed node after it has been disconnected. Connections can be resumed for disconnected sessions, but not terminated sessions.  This command is primarily for use by client machines to automatically reconnect during intermittent network issues. It isn't intended for any other use.
    ///
    /// Parameters:
    ///   - sessionId: The ID of the disconnected session to resume.
    ///   - logger: Logger use during operation
    @inlinable
    public func resumeSession(
        sessionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ResumeSessionResponse {
        let input = ResumeSessionRequest(
            sessionId: sessionId
        )
        return try await self.resumeSession(input, logger: logger)
    }

    /// Sends a signal to an Automation execution to change the current behavior or status of the execution.
    @Sendable
    @inlinable
    public func sendAutomationSignal(_ input: SendAutomationSignalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendAutomationSignalResult {
        try await self.client.execute(
            operation: "SendAutomationSignal", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sends a signal to an Automation execution to change the current behavior or status of the execution.
    ///
    /// Parameters:
    ///   - automationExecutionId: The unique identifier for an existing Automation execution that you want to send the signal to.
    ///   - payload: The data sent with the signal. The data schema depends on the type of signal used in the request. For Approve and Reject signal types, the payload is an optional comment that you can send with the signal type. For example:  Comment="Looks good"  For StartStep and Resume signal types, you must send the name of the Automation step to start or resume as the payload. For example:  StepName="step1"  For the StopStep signal type, you must send the step execution ID as the payload. For example:  StepExecutionId="97fff367-fc5a-4299-aed8-0123456789ab"
    ///   - signalType: The type of signal to send to an Automation execution.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendAutomationSignal(
        automationExecutionId: String,
        payload: [String: [String]]? = nil,
        signalType: SignalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendAutomationSignalResult {
        let input = SendAutomationSignalRequest(
            automationExecutionId: automationExecutionId, 
            payload: payload, 
            signalType: signalType
        )
        return try await self.sendAutomationSignal(input, logger: logger)
    }

    /// Runs commands on one or more managed nodes.
    @Sendable
    @inlinable
    public func sendCommand(_ input: SendCommandRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendCommandResult {
        try await self.client.execute(
            operation: "SendCommand", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Runs commands on one or more managed nodes.
    ///
    /// Parameters:
    ///   - alarmConfiguration: The CloudWatch alarm you want to apply to your command.
    ///   - cloudWatchOutputConfig: Enables Amazon Web Services Systems Manager to send Run Command output to Amazon CloudWatch Logs. Run Command is a tool in Amazon Web Services Systems Manager.
    ///   - comment: User-specified information about the command, such as a brief description of what the command should do.
    ///   - documentHash: The Sha256 or Sha1 hash created by the system when the document was created.   Sha1 hashes have been deprecated.
    ///   - documentHashType: Sha256 or Sha1.  Sha1 hashes have been deprecated.
    ///   - documentName: The name of the Amazon Web Services Systems Manager document (SSM document) to run. This can be a public document or a custom document. To run a shared document belonging to another account, specify the document Amazon Resource Name (ARN). For more information about how to use shared documents, see Sharing SSM documents in the Amazon Web Services Systems Manager User Guide.  If you specify a document name or ARN that hasn't been shared with your account, you receive an InvalidDocument error.
    ///   - documentVersion: The SSM document version to use in the request. You can specify $DEFAULT, $LATEST, or a specific version number. If you run commands by using the Command Line Interface (Amazon Web Services CLI), then you must escape the first two options by using a backslash. If you specify a version number, then you don't need to use the backslash. For example: --document-version "\$DEFAULT" --document-version "\$LATEST" --document-version "3"
    ///   - instanceIds: The IDs of the managed nodes where the command should run. Specifying managed node IDs is most useful when you are targeting a limited number of managed nodes, though you can specify up to 50 IDs. To target a larger number of managed nodes, or if you prefer not to list individual node IDs, we recommend using the Targets option instead. Using Targets, which accepts tag key-value pairs to identify the managed nodes to send commands to, you can a send command to tens, hundreds, or thousands of nodes at once. For more information about how to use targets, see Run commands at scale in the Amazon Web Services Systems Manager User Guide.
    ///   - maxConcurrency: (Optional) The maximum number of managed nodes that are allowed to run the command at the same time. You can specify a number such as 10 or a percentage such as 10%. The default value is 50. For more information about how to use MaxConcurrency, see Using concurrency controls in the Amazon Web Services Systems Manager User Guide.
    ///   - maxErrors: The maximum number of errors allowed without the command failing. When the command fails one more time beyond the value of MaxErrors, the systems stops sending the command to additional targets. You can specify a number like 10 or a percentage like 10%. The default value is 0. For more information about how to use MaxErrors, see Using error controls in the Amazon Web Services Systems Manager User Guide.
    ///   - notificationConfig: Configurations for sending notifications.
    ///   - outputS3BucketName: The name of the S3 bucket where command execution responses should be stored.
    ///   - outputS3KeyPrefix: The directory structure within the S3 bucket where the responses should be stored.
    ///   - outputS3Region: (Deprecated) You can no longer specify this parameter. The system ignores it. Instead, Systems Manager automatically determines the Amazon Web Services Region of the S3 bucket.
    ///   - parameters: The required and optional parameters specified in the document being run.
    ///   - serviceRoleArn: The ARN of the Identity and Access Management (IAM) service role to use to publish Amazon Simple Notification Service (Amazon SNS) notifications for Run Command commands. This role must provide the sns:Publish permission for your notification topic. For information about creating and using this service role, see Monitoring Systems Manager status changes using Amazon SNS notifications in the Amazon Web Services Systems Manager User Guide.
    ///   - targets: An array of search criteria that targets managed nodes using a Key,Value combination that you specify. Specifying targets is most useful when you want to send a command to a large number of managed nodes at once. Using Targets, which accepts tag key-value pairs to identify managed nodes, you can send a command to tens, hundreds, or thousands of nodes at once. To send a command to a smaller number of managed nodes, you can use the InstanceIds option instead. For more information about how to use targets, see Run commands at scale in the Amazon Web Services Systems Manager User Guide.
    ///   - timeoutSeconds: If this time is reached and the command hasn't already started running, it won't run.
    ///   - logger: Logger use during operation
    @inlinable
    public func sendCommand(
        alarmConfiguration: AlarmConfiguration? = nil,
        cloudWatchOutputConfig: CloudWatchOutputConfig? = nil,
        comment: String? = nil,
        documentHash: String? = nil,
        documentHashType: DocumentHashType? = nil,
        documentName: String,
        documentVersion: String? = nil,
        instanceIds: [String]? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        notificationConfig: NotificationConfig? = nil,
        outputS3BucketName: String? = nil,
        outputS3KeyPrefix: String? = nil,
        outputS3Region: String? = nil,
        parameters: [String: [String]]? = nil,
        serviceRoleArn: String? = nil,
        targets: [Target]? = nil,
        timeoutSeconds: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendCommandResult {
        let input = SendCommandRequest(
            alarmConfiguration: alarmConfiguration, 
            cloudWatchOutputConfig: cloudWatchOutputConfig, 
            comment: comment, 
            documentHash: documentHash, 
            documentHashType: documentHashType, 
            documentName: documentName, 
            documentVersion: documentVersion, 
            instanceIds: instanceIds, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            notificationConfig: notificationConfig, 
            outputS3BucketName: outputS3BucketName, 
            outputS3KeyPrefix: outputS3KeyPrefix, 
            outputS3Region: outputS3Region, 
            parameters: parameters, 
            serviceRoleArn: serviceRoleArn, 
            targets: targets, 
            timeoutSeconds: timeoutSeconds
        )
        return try await self.sendCommand(input, logger: logger)
    }

    /// Starts the workflow for just-in-time node access sessions.
    @Sendable
    @inlinable
    public func startAccessRequest(_ input: StartAccessRequestRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartAccessRequestResponse {
        try await self.client.execute(
            operation: "StartAccessRequest", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts the workflow for just-in-time node access sessions.
    ///
    /// Parameters:
    ///   - reason: A brief description explaining why you are requesting access to the node.
    ///   - tags: Key-value pairs of metadata you want to assign to the access request.
    ///   - targets: The node you are requesting access to.
    ///   - logger: Logger use during operation
    @inlinable
    public func startAccessRequest(
        reason: String,
        tags: [Tag]? = nil,
        targets: [Target],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartAccessRequestResponse {
        let input = StartAccessRequestRequest(
            reason: reason, 
            tags: tags, 
            targets: targets
        )
        return try await self.startAccessRequest(input, logger: logger)
    }

    /// Runs an association immediately and only one time. This operation can be helpful when troubleshooting associations.
    @Sendable
    @inlinable
    public func startAssociationsOnce(_ input: StartAssociationsOnceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartAssociationsOnceResult {
        try await self.client.execute(
            operation: "StartAssociationsOnce", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Runs an association immediately and only one time. This operation can be helpful when troubleshooting associations.
    ///
    /// Parameters:
    ///   - associationIds: The association IDs that you want to run immediately and only one time.
    ///   - logger: Logger use during operation
    @inlinable
    public func startAssociationsOnce(
        associationIds: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartAssociationsOnceResult {
        let input = StartAssociationsOnceRequest(
            associationIds: associationIds
        )
        return try await self.startAssociationsOnce(input, logger: logger)
    }

    /// Initiates execution of an Automation runbook.
    @Sendable
    @inlinable
    public func startAutomationExecution(_ input: StartAutomationExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartAutomationExecutionResult {
        try await self.client.execute(
            operation: "StartAutomationExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates execution of an Automation runbook.
    ///
    /// Parameters:
    ///   - alarmConfiguration: The CloudWatch alarm you want to apply to your automation.
    ///   - clientToken: User-provided idempotency token. The token must be unique, is case insensitive, enforces the UUID format, and can't be reused.
    ///   - documentName: The name of the SSM document to run. This can be a public document or a custom document. To run a shared document belonging to another account, specify the document ARN. For more information about how to use shared documents, see Sharing SSM documents in the Amazon Web Services Systems Manager User Guide.
    ///   - documentVersion: The version of the Automation runbook to use for this execution.
    ///   - maxConcurrency: The maximum number of targets allowed to run this task in parallel. You can specify a number, such as 10, or a percentage, such as 10%. The default value is 10. If both this parameter and the TargetLocation:TargetsMaxConcurrency are supplied, TargetLocation:TargetsMaxConcurrency takes precedence.
    ///   - maxErrors: The number of errors that are allowed before the system stops running the automation on additional targets. You can specify either an absolute number of errors, for example 10, or a percentage of the target set, for example 10%. If you specify 3, for example, the system stops running the automation when the fourth error is received. If you specify 0, then the system stops running the automation on additional targets after the first error result is returned. If you run an automation on 50 resources and set max-errors to 10%, then the system stops running the automation on additional targets when the sixth error is received. Executions that are already running an automation when max-errors is reached are allowed to complete, but some of these executions may fail as well. If you need to ensure that there won't be more than max-errors failed executions, set max-concurrency to 1 so the executions proceed one at a time. If this parameter and the TargetLocation:TargetsMaxErrors parameter are both supplied, TargetLocation:TargetsMaxErrors takes precedence.
    ///   - mode: The execution mode of the automation. Valid modes include the following: Auto and Interactive. The default mode is Auto.
    ///   - parameters: A key-value map of execution parameters, which match the declared parameters in the Automation runbook.
    ///   - tags: Optional metadata that you assign to a resource. You can specify a maximum of five tags for an automation. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag an automation to identify an environment or operating system. In this case, you could specify the following key-value pairs:    Key=environment,Value=test     Key=OS,Value=Windows     The Array Members maximum value is reported as 1000. This number includes capacity reserved for internal operations. When calling the StartAutomationExecution action, you can specify a maximum of 5 tags. You can, however, use the AddTagsToResource action to add up to a total of 50 tags to an existing automation configuration.
    ///   - targetLocations: A location is a combination of Amazon Web Services Regions and/or Amazon Web Services accounts where you want to run the automation. Use this operation to start an automation in multiple Amazon Web Services Regions and multiple Amazon Web Services accounts. For more information, see Running automations in multiple Amazon Web Services Regions and accounts in the Amazon Web Services Systems Manager User Guide.
    ///   - targetLocationsURL: Specify a publicly accessible URL for a file that contains the TargetLocations body. Currently, only files in presigned Amazon S3 buckets are supported.
    ///   - targetMaps: A key-value mapping of document parameters to target resources. Both Targets and TargetMaps can't be specified together.
    ///   - targetParameterName: The name of the parameter used as the target resource for the rate-controlled execution. Required if you specify targets.
    ///   - targets: A key-value mapping to target resources. Required if you specify TargetParameterName. If both this parameter and the TargetLocation:Targets parameter are supplied, TargetLocation:Targets takes precedence.
    ///   - logger: Logger use during operation
    @inlinable
    public func startAutomationExecution(
        alarmConfiguration: AlarmConfiguration? = nil,
        clientToken: String? = nil,
        documentName: String,
        documentVersion: String? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        mode: ExecutionMode? = nil,
        parameters: [String: [String]]? = nil,
        tags: [Tag]? = nil,
        targetLocations: [TargetLocation]? = nil,
        targetLocationsURL: String? = nil,
        targetMaps: [[String: [String]]]? = nil,
        targetParameterName: String? = nil,
        targets: [Target]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartAutomationExecutionResult {
        let input = StartAutomationExecutionRequest(
            alarmConfiguration: alarmConfiguration, 
            clientToken: clientToken, 
            documentName: documentName, 
            documentVersion: documentVersion, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            mode: mode, 
            parameters: parameters, 
            tags: tags, 
            targetLocations: targetLocations, 
            targetLocationsURL: targetLocationsURL, 
            targetMaps: targetMaps, 
            targetParameterName: targetParameterName, 
            targets: targets
        )
        return try await self.startAutomationExecution(input, logger: logger)
    }

    /// Creates a change request for Change Manager. The Automation runbooks specified in the change request run only after all required approvals for the change request have been received.
    @Sendable
    @inlinable
    public func startChangeRequestExecution(_ input: StartChangeRequestExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartChangeRequestExecutionResult {
        try await self.client.execute(
            operation: "StartChangeRequestExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a change request for Change Manager. The Automation runbooks specified in the change request run only after all required approvals for the change request have been received.
    ///
    /// Parameters:
    ///   - autoApprove: Indicates whether the change request can be approved automatically without the need for manual approvals. If AutoApprovable is enabled in a change template, then setting AutoApprove to true in StartChangeRequestExecution creates a change request that bypasses approver review.  Change Calendar restrictions are not bypassed in this scenario. If the state of an associated calendar is CLOSED, change freeze approvers must still grant permission for this change request to run. If they don't, the change won't be processed until the calendar state is again OPEN.
    ///   - changeDetails: User-provided details about the change. If no details are provided, content specified in the Template information section of the associated change template is added.
    ///   - changeRequestName: The name of the change request associated with the runbook workflow to be run.
    ///   - clientToken: The user-provided idempotency token. The token must be unique, is case insensitive, enforces the UUID format, and can't be reused.
    ///   - documentName: The name of the change template document to run during the runbook workflow.
    ///   - documentVersion: The version of the change template document to run during the runbook workflow.
    ///   - parameters: A key-value map of parameters that match the declared parameters in the change template document.
    ///   - runbooks: Information about the Automation runbooks that are run during the runbook workflow.  The Automation runbooks specified for the runbook workflow can't run until all required approvals for the change request have been received.
    ///   - scheduledEndTime: The time that the requester expects the runbook workflow related to the change request to complete. The time is an estimate only that the requester provides for reviewers.
    ///   - scheduledTime: The date and time specified in the change request to run the Automation runbooks.  The Automation runbooks specified for the runbook workflow can't run until all required approvals for the change request have been received.
    ///   - tags: Optional metadata that you assign to a resource. You can specify a maximum of five tags for a change request. Tags enable you to categorize a resource in different ways, such as by purpose, owner, or environment. For example, you might want to tag a change request to identify an environment or target Amazon Web Services Region. In this case, you could specify the following key-value pairs:    Key=Environment,Value=Production     Key=Region,Value=us-east-2     The Array Members maximum value is reported as 1000. This number includes capacity reserved for internal operations. When calling the StartChangeRequestExecution action, you can specify a maximum of 5 tags. You can, however, use the AddTagsToResource action to add up to a total of 50 tags to an existing change request configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func startChangeRequestExecution(
        autoApprove: Bool? = nil,
        changeDetails: String? = nil,
        changeRequestName: String? = nil,
        clientToken: String? = nil,
        documentName: String,
        documentVersion: String? = nil,
        parameters: [String: [String]]? = nil,
        runbooks: [Runbook],
        scheduledEndTime: Date? = nil,
        scheduledTime: Date? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartChangeRequestExecutionResult {
        let input = StartChangeRequestExecutionRequest(
            autoApprove: autoApprove, 
            changeDetails: changeDetails, 
            changeRequestName: changeRequestName, 
            clientToken: clientToken, 
            documentName: documentName, 
            documentVersion: documentVersion, 
            parameters: parameters, 
            runbooks: runbooks, 
            scheduledEndTime: scheduledEndTime, 
            scheduledTime: scheduledTime, 
            tags: tags
        )
        return try await self.startChangeRequestExecution(input, logger: logger)
    }

    /// Initiates the process of creating a preview showing the effects that running a specified Automation runbook would have on the targeted resources.
    @Sendable
    @inlinable
    public func startExecutionPreview(_ input: StartExecutionPreviewRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartExecutionPreviewResponse {
        try await self.client.execute(
            operation: "StartExecutionPreview", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates the process of creating a preview showing the effects that running a specified Automation runbook would have on the targeted resources.
    ///
    /// Parameters:
    ///   - documentName: The name of the Automation runbook to run. The result of the execution preview indicates what the impact would be of running this runbook.
    ///   - documentVersion: The version of the Automation runbook to run. The default value is $DEFAULT.
    ///   - executionInputs: Information about the inputs that can be specified for the preview operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func startExecutionPreview(
        documentName: String,
        documentVersion: String? = nil,
        executionInputs: ExecutionInputs? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartExecutionPreviewResponse {
        let input = StartExecutionPreviewRequest(
            documentName: documentName, 
            documentVersion: documentVersion, 
            executionInputs: executionInputs
        )
        return try await self.startExecutionPreview(input, logger: logger)
    }

    /// Initiates a connection to a target (for example, a managed node) for a Session Manager session. Returns a URL and token that can be used to open a WebSocket connection for sending input and receiving outputs.  Amazon Web Services CLI usage: start-session is an interactive command that requires the Session Manager plugin to be installed on the client machine making the call. For information, see Install the Session Manager plugin for the Amazon Web Services CLI in the Amazon Web Services Systems Manager User Guide. Amazon Web Services Tools for PowerShell usage: Start-SSMSession isn't currently supported by Amazon Web Services Tools for PowerShell on Windows local machines.
    @Sendable
    @inlinable
    public func startSession(_ input: StartSessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartSessionResponse {
        try await self.client.execute(
            operation: "StartSession", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates a connection to a target (for example, a managed node) for a Session Manager session. Returns a URL and token that can be used to open a WebSocket connection for sending input and receiving outputs.  Amazon Web Services CLI usage: start-session is an interactive command that requires the Session Manager plugin to be installed on the client machine making the call. For information, see Install the Session Manager plugin for the Amazon Web Services CLI in the Amazon Web Services Systems Manager User Guide. Amazon Web Services Tools for PowerShell usage: Start-SSMSession isn't currently supported by Amazon Web Services Tools for PowerShell on Windows local machines.
    ///
    /// Parameters:
    ///   - documentName: The name of the SSM document you want to use to define the type of session, input parameters, or preferences for the session. For example, SSM-SessionManagerRunShell. You can call the GetDocument API to verify the document exists before attempting to start a session. If no document name is provided, a shell to the managed node is launched by default. For more information, see Start a session in the Amazon Web Services Systems Manager User Guide.
    ///   - parameters: The values you want to specify for the parameters defined in the Session document. For more information about these parameters, see Create a Session Manager preferences document in the Amazon Web Services Systems Manager User Guide.
    ///   - reason: The reason for connecting to the instance. This value is included in the details for the Amazon CloudWatch Events event created when you start the session.
    ///   - target: The managed node to connect to for the session.
    ///   - logger: Logger use during operation
    @inlinable
    public func startSession(
        documentName: String? = nil,
        parameters: [String: [String]]? = nil,
        reason: String? = nil,
        target: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartSessionResponse {
        let input = StartSessionRequest(
            documentName: documentName, 
            parameters: parameters, 
            reason: reason, 
            target: target
        )
        return try await self.startSession(input, logger: logger)
    }

    /// Stop an Automation that is currently running.
    @Sendable
    @inlinable
    public func stopAutomationExecution(_ input: StopAutomationExecutionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopAutomationExecutionResult {
        try await self.client.execute(
            operation: "StopAutomationExecution", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stop an Automation that is currently running.
    ///
    /// Parameters:
    ///   - automationExecutionId: The execution ID of the Automation to stop.
    ///   - type: The stop request type. Valid types include the following: Cancel and Complete. The default type is Cancel.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopAutomationExecution(
        automationExecutionId: String,
        type: StopType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopAutomationExecutionResult {
        let input = StopAutomationExecutionRequest(
            automationExecutionId: automationExecutionId, 
            type: type
        )
        return try await self.stopAutomationExecution(input, logger: logger)
    }

    /// Permanently ends a session and closes the data connection between the Session Manager client and SSM Agent on the managed node. A terminated session can't be resumed.
    @Sendable
    @inlinable
    public func terminateSession(_ input: TerminateSessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TerminateSessionResponse {
        try await self.client.execute(
            operation: "TerminateSession", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Permanently ends a session and closes the data connection between the Session Manager client and SSM Agent on the managed node. A terminated session can't be resumed.
    ///
    /// Parameters:
    ///   - sessionId: The ID of the session to terminate.
    ///   - logger: Logger use during operation
    @inlinable
    public func terminateSession(
        sessionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TerminateSessionResponse {
        let input = TerminateSessionRequest(
            sessionId: sessionId
        )
        return try await self.terminateSession(input, logger: logger)
    }

    /// Remove a label or labels from a parameter. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    @Sendable
    @inlinable
    public func unlabelParameterVersion(_ input: UnlabelParameterVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UnlabelParameterVersionResult {
        try await self.client.execute(
            operation: "UnlabelParameterVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Remove a label or labels from a parameter. Parameter names can't contain spaces. The service removes any spaces specified for the beginning or end of a parameter name. If the specified name for a parameter contains spaces between characters, the request fails with a ValidationException error.
    ///
    /// Parameters:
    ///   - labels: One or more labels to delete from the specified parameter version.
    ///   - name: The name of the parameter from which you want to delete one or more labels.  You can't enter the Amazon Resource Name (ARN) for a parameter, only the parameter name itself.
    ///   - parameterVersion: The specific version of the parameter which you want to delete one or more labels from. If it isn't present, the call will fail.
    ///   - logger: Logger use during operation
    @inlinable
    public func unlabelParameterVersion(
        labels: [String],
        name: String,
        parameterVersion: Int64,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UnlabelParameterVersionResult {
        let input = UnlabelParameterVersionRequest(
            labels: labels, 
            name: name, 
            parameterVersion: parameterVersion
        )
        return try await self.unlabelParameterVersion(input, logger: logger)
    }

    /// Updates an association. You can update the association name and version, the document version, schedule, parameters, and Amazon Simple Storage Service (Amazon S3) output. When you call UpdateAssociation, the system removes all optional parameters from the request and overwrites the association with null values for those parameters. This is by design. You must specify all optional parameters in the call, even if you are not changing the parameters. This includes the Name parameter. Before calling this API action, we recommend that you call the DescribeAssociation API operation and make a note of all optional parameters required for your UpdateAssociation call. In order to call this API operation, a user, group, or role must be granted permission to call the DescribeAssociation API operation. If you don't have permission to call DescribeAssociation, then you receive the following error: An error occurred (AccessDeniedException) when calling the UpdateAssociation operation: User: isn't authorized to perform: ssm:DescribeAssociation on resource:    When you update an association, the association immediately runs against the specified targets. You can add the ApplyOnlyAtCronInterval parameter to run the association during the next schedule run.
    @Sendable
    @inlinable
    public func updateAssociation(_ input: UpdateAssociationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAssociationResult {
        try await self.client.execute(
            operation: "UpdateAssociation", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an association. You can update the association name and version, the document version, schedule, parameters, and Amazon Simple Storage Service (Amazon S3) output. When you call UpdateAssociation, the system removes all optional parameters from the request and overwrites the association with null values for those parameters. This is by design. You must specify all optional parameters in the call, even if you are not changing the parameters. This includes the Name parameter. Before calling this API action, we recommend that you call the DescribeAssociation API operation and make a note of all optional parameters required for your UpdateAssociation call. In order to call this API operation, a user, group, or role must be granted permission to call the DescribeAssociation API operation. If you don't have permission to call DescribeAssociation, then you receive the following error: An error occurred (AccessDeniedException) when calling the UpdateAssociation operation: User: isn't authorized to perform: ssm:DescribeAssociation on resource:    When you update an association, the association immediately runs against the specified targets. You can add the ApplyOnlyAtCronInterval parameter to run the association during the next schedule run.
    ///
    /// Parameters:
    ///   - alarmConfiguration: 
    ///   - applyOnlyAtCronInterval: By default, when you update an association, the system runs it immediately after it is updated and then according to the schedule you specified. Specify true for ApplyOnlyAtCronInterval if you want the association to run only according to the schedule you specified. If you chose this option when you created an association and later you edit that association or you make changes to the Automation runbook or SSM document on which that association is based, State Manager applies the association at the next specified cron interval. For example, if you chose the Latest version of an SSM document when you created an association and you edit the association by choosing a different document version on the Documents page, State Manager applies the association at the next specified cron interval if you previously set ApplyOnlyAtCronInterval to true. If this option wasn't selected, State Manager immediately runs the association. For more information, see Understanding when associations are applied to resources and About target updates with Automation runbooks in the Amazon Web Services Systems Manager User Guide. This parameter isn't supported for rate expressions. You can reset this parameter. To do so, specify the no-apply-only-at-cron-interval parameter when you update the association from the command line. This parameter forces the association to run immediately after updating it and according to the interval specified.
    ///   - associationId: The ID of the association you want to update.
    ///   - associationName: The name of the association that you want to update.
    ///   - associationVersion: This parameter is provided for concurrency control purposes. You must specify the latest association version in the service. If you want to ensure that this request succeeds, either specify $LATEST, or omit this parameter.
    ///   - automationTargetParameterName: Choose the parameter that will define how your automation will branch out. This target is required for associations that use an Automation runbook and target resources by using rate controls. Automation is a tool in Amazon Web Services Systems Manager.
    ///   - calendarNames: The names or Amazon Resource Names (ARNs) of the Change Calendar type documents you want to gate your associations under. The associations only run when that change calendar is open. For more information, see Amazon Web Services Systems Manager Change Calendar in the Amazon Web Services Systems Manager User Guide.
    ///   - complianceSeverity: The severity level to assign to the association.
    ///   - documentVersion: The document version you want update for the association.   State Manager doesn't support running associations that use a new version of a document if that document is shared from another account. State Manager always runs the default version of a document if shared from another account, even though the Systems Manager console shows that a new version was processed. If you want to run an association using a new version of a document shared form another account, you must set the document version to default.
    ///   - duration: The number of hours the association can run before it is canceled. Duration applies to associations that are currently running, and any pending and in progress commands on all targets. If a target was taken offline for the association to run, it is made available again immediately, without a reboot.  The Duration parameter applies only when both these conditions are true:   The association for which you specify a duration is cancelable according to the parameters of the SSM command document or Automation runbook associated with this execution.    The command specifies the  ApplyOnlyAtCronInterval parameter, which means that the association doesn't run immediately after it is updated, but only according to the specified schedule.
    ///   - maxConcurrency: The maximum number of targets allowed to run the association at the same time. You can specify a number, for example 10, or a percentage of the target set, for example 10%. The default value is 100%, which means all targets run the association at the same time. If a new managed node starts and attempts to run an association while Systems Manager is running MaxConcurrency associations, the association is allowed to run. During the next association interval, the new managed node will process its association within the limit specified for MaxConcurrency.
    ///   - maxErrors: The number of errors that are allowed before the system stops sending requests to run the association on additional targets. You can specify either an absolute number of errors, for example 10, or a percentage of the target set, for example 10%. If you specify 3, for example, the system stops sending requests when the fourth error is received. If you specify 0, then the system stops sending requests after the first error is returned. If you run an association on 50 managed nodes and set MaxError to 10%, then the system stops sending the request when the sixth error is received. Executions that are already running an association when MaxErrors is reached are allowed to complete, but some of these executions may fail as well. If you need to ensure that there won't be more than max-errors failed executions, set MaxConcurrency to 1 so that executions proceed one at a time.
    ///   - name: The name of the SSM Command document or Automation runbook that contains the configuration information for the managed node. You can specify Amazon Web Services-predefined documents, documents you created, or a document that is shared with you from another account. For Systems Manager document (SSM document) that are shared with you from other Amazon Web Services accounts, you must specify the complete SSM document ARN, in the following format:  arn:aws:ssm:region:account-id:document/document-name   For example:  arn:aws:ssm:us-east-2:12345678912:document/My-Shared-Document  For Amazon Web Services-predefined documents and SSM documents you created in your account, you only need to specify the document name. For example, AWS-ApplyPatchBaseline or My-Document.
    ///   - outputLocation: An S3 bucket where you want to store the results of this request.
    ///   - parameters: The parameters you want to update for the association. If you create a parameter using Parameter Store, a tool in Amazon Web Services Systems Manager, you can reference the parameter using {{ssm:parameter-name}}.
    ///   - scheduleExpression: The cron expression used to schedule the association that you want to update.
    ///   - scheduleOffset: Number of days to wait after the scheduled day to run an association. For example, if you specified a cron schedule of cron(0 0 ? * THU#2 *), you could specify an offset of 3 to run the association each Sunday after the second Thursday of the month. For more information about cron schedules for associations, see Reference: Cron and rate expressions for Systems Manager in the Amazon Web Services Systems Manager User Guide.   To use offsets, you must specify the ApplyOnlyAtCronInterval parameter. This option tells the system not to run an association immediately after you create it.
    ///   - syncCompliance: The mode for generating association compliance. You can specify AUTO or MANUAL. In AUTO mode, the system uses the status of the association execution to determine the compliance status. If the association execution runs successfully, then the association is COMPLIANT. If the association execution doesn't run successfully, the association is NON-COMPLIANT. In MANUAL mode, you must specify the AssociationId as a parameter for the PutComplianceItems API operation. In this case, compliance data isn't managed by State Manager, a tool in Amazon Web Services Systems Manager. It is managed by your direct call to the PutComplianceItems API operation. By default, all associations use AUTO mode.
    ///   - targetLocations: A location is a combination of Amazon Web Services Regions and Amazon Web Services accounts where you want to run the association. Use this action to update an association in multiple Regions and multiple accounts.
    ///   - targetMaps: A key-value mapping of document parameters to target resources. Both Targets and TargetMaps can't be specified together.
    ///   - targets: The targets of the association.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssociation(
        alarmConfiguration: AlarmConfiguration? = nil,
        applyOnlyAtCronInterval: Bool? = nil,
        associationId: String,
        associationName: String? = nil,
        associationVersion: String? = nil,
        automationTargetParameterName: String? = nil,
        calendarNames: [String]? = nil,
        complianceSeverity: AssociationComplianceSeverity? = nil,
        documentVersion: String? = nil,
        duration: Int? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        name: String? = nil,
        outputLocation: InstanceAssociationOutputLocation? = nil,
        parameters: [String: [String]]? = nil,
        scheduleExpression: String? = nil,
        scheduleOffset: Int? = nil,
        syncCompliance: AssociationSyncCompliance? = nil,
        targetLocations: [TargetLocation]? = nil,
        targetMaps: [[String: [String]]]? = nil,
        targets: [Target]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAssociationResult {
        let input = UpdateAssociationRequest(
            alarmConfiguration: alarmConfiguration, 
            applyOnlyAtCronInterval: applyOnlyAtCronInterval, 
            associationId: associationId, 
            associationName: associationName, 
            associationVersion: associationVersion, 
            automationTargetParameterName: automationTargetParameterName, 
            calendarNames: calendarNames, 
            complianceSeverity: complianceSeverity, 
            documentVersion: documentVersion, 
            duration: duration, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            name: name, 
            outputLocation: outputLocation, 
            parameters: parameters, 
            scheduleExpression: scheduleExpression, 
            scheduleOffset: scheduleOffset, 
            syncCompliance: syncCompliance, 
            targetLocations: targetLocations, 
            targetMaps: targetMaps, 
            targets: targets
        )
        return try await self.updateAssociation(input, logger: logger)
    }

    /// Updates the status of the Amazon Web Services Systems Manager document (SSM document) associated with the specified managed node.  UpdateAssociationStatus is primarily used by the Amazon Web Services Systems Manager Agent (SSM Agent) to report status updates about your associations and is only used for associations created with the InstanceId legacy parameter.
    @Sendable
    @inlinable
    public func updateAssociationStatus(_ input: UpdateAssociationStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateAssociationStatusResult {
        try await self.client.execute(
            operation: "UpdateAssociationStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the status of the Amazon Web Services Systems Manager document (SSM document) associated with the specified managed node.  UpdateAssociationStatus is primarily used by the Amazon Web Services Systems Manager Agent (SSM Agent) to report status updates about your associations and is only used for associations created with the InstanceId legacy parameter.
    ///
    /// Parameters:
    ///   - associationStatus: The association status.
    ///   - instanceId: The managed node ID.
    ///   - name: The name of the SSM document.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateAssociationStatus(
        associationStatus: AssociationStatus,
        instanceId: String,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateAssociationStatusResult {
        let input = UpdateAssociationStatusRequest(
            associationStatus: associationStatus, 
            instanceId: instanceId, 
            name: name
        )
        return try await self.updateAssociationStatus(input, logger: logger)
    }

    /// Updates one or more values for an SSM document.
    @Sendable
    @inlinable
    public func updateDocument(_ input: UpdateDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDocumentResult {
        try await self.client.execute(
            operation: "UpdateDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates one or more values for an SSM document.
    ///
    /// Parameters:
    ///   - attachments: A list of key-value pairs that describe attachments to a version of a document.
    ///   - content: A valid JSON or YAML string.
    ///   - displayName: The friendly name of the SSM document that you want to update. This value can differ for each version of the document. If you don't specify a value for this parameter in your request, the existing value is applied to the new document version.
    ///   - documentFormat: Specify the document format for the new document version. Systems Manager supports JSON and YAML documents. JSON is the default format.
    ///   - documentVersion: The version of the document that you want to update. Currently, Systems Manager supports updating only the latest version of the document. You can specify the version number of the latest version or use the $LATEST variable.  If you change a document version for a State Manager association, Systems Manager immediately runs the association unless you previously specifed the apply-only-at-cron-interval parameter.
    ///   - name: The name of the SSM document that you want to update.
    ///   - targetType: Specify a new target type for the document.
    ///   - versionName: An optional field specifying the version of the artifact you are updating with the document. For example, 12.6. This value is unique across all versions of a document, and can't be changed.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocument(
        attachments: [AttachmentsSource]? = nil,
        content: String,
        displayName: String? = nil,
        documentFormat: DocumentFormat? = nil,
        documentVersion: String? = nil,
        name: String,
        targetType: String? = nil,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDocumentResult {
        let input = UpdateDocumentRequest(
            attachments: attachments, 
            content: content, 
            displayName: displayName, 
            documentFormat: documentFormat, 
            documentVersion: documentVersion, 
            name: name, 
            targetType: targetType, 
            versionName: versionName
        )
        return try await self.updateDocument(input, logger: logger)
    }

    /// Set the default version of a document.   If you change a document version for a State Manager association, Systems Manager immediately runs the association unless you previously specifed the apply-only-at-cron-interval parameter.
    @Sendable
    @inlinable
    public func updateDocumentDefaultVersion(_ input: UpdateDocumentDefaultVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDocumentDefaultVersionResult {
        try await self.client.execute(
            operation: "UpdateDocumentDefaultVersion", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Set the default version of a document.   If you change a document version for a State Manager association, Systems Manager immediately runs the association unless you previously specifed the apply-only-at-cron-interval parameter.
    ///
    /// Parameters:
    ///   - documentVersion: The version of a custom document that you want to set as the default version.
    ///   - name: The name of a custom document that you want to set as the default version.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocumentDefaultVersion(
        documentVersion: String,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDocumentDefaultVersionResult {
        let input = UpdateDocumentDefaultVersionRequest(
            documentVersion: documentVersion, 
            name: name
        )
        return try await self.updateDocumentDefaultVersion(input, logger: logger)
    }

    /// Updates information related to approval reviews for a specific version of a change template in Change Manager.
    @Sendable
    @inlinable
    public func updateDocumentMetadata(_ input: UpdateDocumentMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDocumentMetadataResponse {
        try await self.client.execute(
            operation: "UpdateDocumentMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates information related to approval reviews for a specific version of a change template in Change Manager.
    ///
    /// Parameters:
    ///   - documentReviews: The change template review details to update.
    ///   - documentVersion: The version of a change template in which to update approval metadata.
    ///   - name: The name of the change template for which a version's metadata is to be updated.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocumentMetadata(
        documentReviews: DocumentReviews,
        documentVersion: String? = nil,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDocumentMetadataResponse {
        let input = UpdateDocumentMetadataRequest(
            documentReviews: documentReviews, 
            documentVersion: documentVersion, 
            name: name
        )
        return try await self.updateDocumentMetadata(input, logger: logger)
    }

    /// Updates an existing maintenance window. Only specified parameters are modified.  The value you specify for Duration determines the specific end time for the maintenance window based on the time it begins. No maintenance window tasks are permitted to start after the resulting endtime minus the number of hours you specify for Cutoff. For example, if the maintenance window starts at 3 PM, the duration is three hours, and the value you specify for Cutoff is one hour, no maintenance window tasks can start after 5 PM.
    @Sendable
    @inlinable
    public func updateMaintenanceWindow(_ input: UpdateMaintenanceWindowRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMaintenanceWindowResult {
        try await self.client.execute(
            operation: "UpdateMaintenanceWindow", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing maintenance window. Only specified parameters are modified.  The value you specify for Duration determines the specific end time for the maintenance window based on the time it begins. No maintenance window tasks are permitted to start after the resulting endtime minus the number of hours you specify for Cutoff. For example, if the maintenance window starts at 3 PM, the duration is three hours, and the value you specify for Cutoff is one hour, no maintenance window tasks can start after 5 PM.
    ///
    /// Parameters:
    ///   - allowUnassociatedTargets: Whether targets must be registered with the maintenance window before tasks can be defined for those targets.
    ///   - cutoff: The number of hours before the end of the maintenance window that Amazon Web Services Systems Manager stops scheduling new tasks for execution.
    ///   - description: An optional description for the update request.
    ///   - duration: The duration of the maintenance window in hours.
    ///   - enabled: Whether the maintenance window is enabled.
    ///   - endDate: The date and time, in ISO-8601 Extended format, for when you want the maintenance window to become inactive. EndDate allows you to set a date and time in the future when the maintenance window will no longer run.
    ///   - name: The name of the maintenance window.
    ///   - replace: If True, then all fields that are required by the CreateMaintenanceWindow operation are also required for this API request. Optional fields that aren't specified are set to null.
    ///   - schedule: The schedule of the maintenance window in the form of a cron or rate expression.
    ///   - scheduleOffset: The number of days to wait after the date and time specified by a cron expression before running the maintenance window. For example, the following cron expression schedules a maintenance window to run the third Tuesday of every month at 11:30 PM.  cron(30 23 ? * TUE#3 *)  If the schedule offset is 2, the maintenance window won't run until two days later.
    ///   - scheduleTimezone: The time zone that the scheduled maintenance window executions are based on, in Internet Assigned Numbers Authority (IANA) format. For example: "America/Los_Angeles", "UTC", or "Asia/Seoul". For more information, see the Time Zone Database on the IANA website.
    ///   - startDate: The date and time, in ISO-8601 Extended format, for when you want the maintenance window to become active. StartDate allows you to delay activation of the maintenance window until the specified future date.  When using a rate schedule, if you provide a start date that occurs in the past, the current date and time are used as the start date.
    ///   - windowId: The ID of the maintenance window to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMaintenanceWindow(
        allowUnassociatedTargets: Bool? = nil,
        cutoff: Int? = nil,
        description: String? = nil,
        duration: Int? = nil,
        enabled: Bool? = nil,
        endDate: String? = nil,
        name: String? = nil,
        replace: Bool? = nil,
        schedule: String? = nil,
        scheduleOffset: Int? = nil,
        scheduleTimezone: String? = nil,
        startDate: String? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMaintenanceWindowResult {
        let input = UpdateMaintenanceWindowRequest(
            allowUnassociatedTargets: allowUnassociatedTargets, 
            cutoff: cutoff, 
            description: description, 
            duration: duration, 
            enabled: enabled, 
            endDate: endDate, 
            name: name, 
            replace: replace, 
            schedule: schedule, 
            scheduleOffset: scheduleOffset, 
            scheduleTimezone: scheduleTimezone, 
            startDate: startDate, 
            windowId: windowId
        )
        return try await self.updateMaintenanceWindow(input, logger: logger)
    }

    /// Modifies the target of an existing maintenance window. You can change the following:   Name   Description   Owner   IDs for an ID target   Tags for a Tag target   From any supported tag type to another. The three supported tag types are ID target, Tag target, and resource group. For more information, see Target.    If a parameter is null, then the corresponding field isn't modified.
    @Sendable
    @inlinable
    public func updateMaintenanceWindowTarget(_ input: UpdateMaintenanceWindowTargetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMaintenanceWindowTargetResult {
        try await self.client.execute(
            operation: "UpdateMaintenanceWindowTarget", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies the target of an existing maintenance window. You can change the following:   Name   Description   Owner   IDs for an ID target   Tags for a Tag target   From any supported tag type to another. The three supported tag types are ID target, Tag target, and resource group. For more information, see Target.    If a parameter is null, then the corresponding field isn't modified.
    ///
    /// Parameters:
    ///   - description: An optional description for the update.
    ///   - name: A name for the update.
    ///   - ownerInformation: User-provided value that will be included in any Amazon CloudWatch Events events raised while running tasks for these targets in this maintenance window.
    ///   - replace: If True, then all fields that are required by the RegisterTargetWithMaintenanceWindow operation are also required for this API request. Optional fields that aren't specified are set to null.
    ///   - targets: The targets to add or replace.
    ///   - windowId: The maintenance window ID with which to modify the target.
    ///   - windowTargetId: The target ID to modify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMaintenanceWindowTarget(
        description: String? = nil,
        name: String? = nil,
        ownerInformation: String? = nil,
        replace: Bool? = nil,
        targets: [Target]? = nil,
        windowId: String,
        windowTargetId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMaintenanceWindowTargetResult {
        let input = UpdateMaintenanceWindowTargetRequest(
            description: description, 
            name: name, 
            ownerInformation: ownerInformation, 
            replace: replace, 
            targets: targets, 
            windowId: windowId, 
            windowTargetId: windowTargetId
        )
        return try await self.updateMaintenanceWindowTarget(input, logger: logger)
    }

    /// Modifies a task assigned to a maintenance window. You can't change the task type, but you can change the following values:    TaskARN. For example, you can change a RUN_COMMAND task from AWS-RunPowerShellScript to AWS-RunShellScript.    ServiceRoleArn     TaskInvocationParameters     Priority     MaxConcurrency     MaxErrors     One or more targets must be specified for maintenance window Run Command-type tasks. Depending on the task, targets are optional for other maintenance window task types (Automation, Lambda, and Step Functions). For more information about running tasks that don't specify targets, see Registering maintenance window tasks without targets in the Amazon Web Services Systems Manager User Guide.  If the value for a parameter in UpdateMaintenanceWindowTask is null, then the corresponding field isn't modified. If you set Replace to true, then all fields required by the RegisterTaskWithMaintenanceWindow operation are required for this request. Optional fields that aren't specified are set to null.  When you update a maintenance window task that has options specified in TaskInvocationParameters, you must provide again all the TaskInvocationParameters values that you want to retain. The values you don't specify again are removed. For example, suppose that when you registered a Run Command task, you specified TaskInvocationParameters values for Comment, NotificationConfig, and OutputS3BucketName. If you update the maintenance window task and specify only a different OutputS3BucketName value, the values for Comment and NotificationConfig are removed.
    @Sendable
    @inlinable
    public func updateMaintenanceWindowTask(_ input: UpdateMaintenanceWindowTaskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateMaintenanceWindowTaskResult {
        try await self.client.execute(
            operation: "UpdateMaintenanceWindowTask", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies a task assigned to a maintenance window. You can't change the task type, but you can change the following values:    TaskARN. For example, you can change a RUN_COMMAND task from AWS-RunPowerShellScript to AWS-RunShellScript.    ServiceRoleArn     TaskInvocationParameters     Priority     MaxConcurrency     MaxErrors     One or more targets must be specified for maintenance window Run Command-type tasks. Depending on the task, targets are optional for other maintenance window task types (Automation, Lambda, and Step Functions). For more information about running tasks that don't specify targets, see Registering maintenance window tasks without targets in the Amazon Web Services Systems Manager User Guide.  If the value for a parameter in UpdateMaintenanceWindowTask is null, then the corresponding field isn't modified. If you set Replace to true, then all fields required by the RegisterTaskWithMaintenanceWindow operation are required for this request. Optional fields that aren't specified are set to null.  When you update a maintenance window task that has options specified in TaskInvocationParameters, you must provide again all the TaskInvocationParameters values that you want to retain. The values you don't specify again are removed. For example, suppose that when you registered a Run Command task, you specified TaskInvocationParameters values for Comment, NotificationConfig, and OutputS3BucketName. If you update the maintenance window task and specify only a different OutputS3BucketName value, the values for Comment and NotificationConfig are removed.
    ///
    /// Parameters:
    ///   - alarmConfiguration: The CloudWatch alarm you want to apply to your maintenance window task.
    ///   - cutoffBehavior: Indicates whether tasks should continue to run after the cutoff time specified in the maintenance windows is reached.     CONTINUE_TASK: When the cutoff time is reached, any tasks that are running continue. The default value.    CANCEL_TASK:   For Automation, Lambda, Step Functions tasks: When the cutoff time is reached, any task invocations that are already running continue, but no new task invocations are started.   For Run Command tasks: When the cutoff time is reached, the system sends a CancelCommand operation that attempts to cancel the command associated with the task. However, there is no guarantee that the command will be terminated and the underlying process stopped.   The status for tasks that are not completed is TIMED_OUT.
    ///   - description: The new task description to specify.
    ///   - loggingInfo: The new logging location in Amazon S3 to specify.   LoggingInfo has been deprecated. To specify an Amazon Simple Storage Service (Amazon S3) bucket to contain logs, instead use the OutputS3BucketName and OutputS3KeyPrefix options in the TaskInvocationParameters structure. For information about how Amazon Web Services Systems Manager handles these options for the supported maintenance window task types, see MaintenanceWindowTaskInvocationParameters.
    ///   - maxConcurrency: The new MaxConcurrency value you want to specify. MaxConcurrency is the number of targets that are allowed to run this task, in parallel.  Although this element is listed as "Required: No", a value can be omitted only when you are registering or updating a targetless task You must provide a value in all other cases. For maintenance window tasks without a target specified, you can't supply a value for this option. Instead, the system inserts a placeholder value of 1. This value doesn't affect the running of your task.
    ///   - maxErrors: The new MaxErrors value to specify. MaxErrors is the maximum number of errors that are allowed before the task stops being scheduled.  Although this element is listed as "Required: No", a value can be omitted only when you are registering or updating a targetless task You must provide a value in all other cases. For maintenance window tasks without a target specified, you can't supply a value for this option. Instead, the system inserts a placeholder value of 1. This value doesn't affect the running of your task.
    ///   - name: The new task name to specify.
    ///   - priority: The new task priority to specify. The lower the number, the higher the priority. Tasks that have the same priority are scheduled in parallel.
    ///   - replace: If True, then all fields that are required by the RegisterTaskWithMaintenanceWindow operation are also required for this API request. Optional fields that aren't specified are set to null.
    ///   - serviceRoleArn: The Amazon Resource Name (ARN) of the IAM service role for Amazon Web Services Systems Manager to assume when running a maintenance window task. If you do not specify a service role ARN, Systems Manager uses a service-linked role in your account. If no appropriate service-linked role for Systems Manager exists in your account, it is created when you run RegisterTaskWithMaintenanceWindow. However, for an improved security posture, we strongly recommend creating a custom policy and custom service role for running your maintenance window tasks. The policy can be crafted to provide only the permissions needed for your particular maintenance window tasks. For more information, see Setting up Maintenance Windows in the in the Amazon Web Services Systems Manager User Guide.
    ///   - targets: The targets (either managed nodes or tags) to modify. Managed nodes are specified using the format Key=instanceids,Values=instanceID_1,instanceID_2. Tags are specified using the format  Key=tag_name,Values=tag_value.   One or more targets must be specified for maintenance window Run Command-type tasks. Depending on the task, targets are optional for other maintenance window task types (Automation, Lambda, and Step Functions). For more information about running tasks that don't specify targets, see Registering maintenance window tasks without targets in the Amazon Web Services Systems Manager User Guide.
    ///   - taskArn: The task ARN to modify.
    ///   - taskInvocationParameters: The parameters that the task should use during execution. Populate only the fields that match the task type. All other fields should be empty.  When you update a maintenance window task that has options specified in TaskInvocationParameters, you must provide again all the TaskInvocationParameters values that you want to retain. The values you don't specify again are removed. For example, suppose that when you registered a Run Command task, you specified TaskInvocationParameters values for Comment, NotificationConfig, and OutputS3BucketName. If you update the maintenance window task and specify only a different OutputS3BucketName value, the values for Comment and NotificationConfig are removed.
    ///   - taskParameters: The parameters to modify.   TaskParameters has been deprecated. To specify parameters to pass to a task when it runs, instead use the Parameters option in the TaskInvocationParameters structure. For information about how Systems Manager handles these options for the supported maintenance window task types, see MaintenanceWindowTaskInvocationParameters.  The map has the following format: Key: string, between 1 and 255 characters Value: an array of strings, each string is between 1 and 255 characters
    ///   - windowId: The maintenance window ID that contains the task to modify.
    ///   - windowTaskId: The task ID to modify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateMaintenanceWindowTask(
        alarmConfiguration: AlarmConfiguration? = nil,
        cutoffBehavior: MaintenanceWindowTaskCutoffBehavior? = nil,
        description: String? = nil,
        loggingInfo: LoggingInfo? = nil,
        maxConcurrency: String? = nil,
        maxErrors: String? = nil,
        name: String? = nil,
        priority: Int? = nil,
        replace: Bool? = nil,
        serviceRoleArn: String? = nil,
        targets: [Target]? = nil,
        taskArn: String? = nil,
        taskInvocationParameters: MaintenanceWindowTaskInvocationParameters? = nil,
        taskParameters: [String: MaintenanceWindowTaskParameterValueExpression]? = nil,
        windowId: String,
        windowTaskId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateMaintenanceWindowTaskResult {
        let input = UpdateMaintenanceWindowTaskRequest(
            alarmConfiguration: alarmConfiguration, 
            cutoffBehavior: cutoffBehavior, 
            description: description, 
            loggingInfo: loggingInfo, 
            maxConcurrency: maxConcurrency, 
            maxErrors: maxErrors, 
            name: name, 
            priority: priority, 
            replace: replace, 
            serviceRoleArn: serviceRoleArn, 
            targets: targets, 
            taskArn: taskArn, 
            taskInvocationParameters: taskInvocationParameters, 
            taskParameters: taskParameters, 
            windowId: windowId, 
            windowTaskId: windowTaskId
        )
        return try await self.updateMaintenanceWindowTask(input, logger: logger)
    }

    /// Changes the Identity and Access Management (IAM) role that is assigned to the on-premises server, edge device, or virtual machines (VM). IAM roles are first assigned to these hybrid nodes during the activation process. For more information, see CreateActivation.
    @Sendable
    @inlinable
    public func updateManagedInstanceRole(_ input: UpdateManagedInstanceRoleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateManagedInstanceRoleResult {
        try await self.client.execute(
            operation: "UpdateManagedInstanceRole", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes the Identity and Access Management (IAM) role that is assigned to the on-premises server, edge device, or virtual machines (VM). IAM roles are first assigned to these hybrid nodes during the activation process. For more information, see CreateActivation.
    ///
    /// Parameters:
    ///   - iamRole: The name of the Identity and Access Management (IAM) role that you want to assign to the managed node. This IAM role must provide AssumeRole permissions for the Amazon Web Services Systems Manager service principal ssm.amazonaws.com. For more information, see Create the IAM service role required for Systems Manager in hybrid and multicloud environments in the Amazon Web Services Systems Manager User Guide.  You can't specify an IAM service-linked role for this parameter. You must create a unique role.
    ///   - instanceId: The ID of the managed node where you want to update the role.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateManagedInstanceRole(
        iamRole: String,
        instanceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateManagedInstanceRoleResult {
        let input = UpdateManagedInstanceRoleRequest(
            iamRole: iamRole, 
            instanceId: instanceId
        )
        return try await self.updateManagedInstanceRole(input, logger: logger)
    }

    /// Edit or change an OpsItem. You must have permission in Identity and Access Management (IAM) to update an OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    @Sendable
    @inlinable
    public func updateOpsItem(_ input: UpdateOpsItemRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOpsItemResponse {
        try await self.client.execute(
            operation: "UpdateOpsItem", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Edit or change an OpsItem. You must have permission in Identity and Access Management (IAM) to update an OpsItem. For more information, see Set up OpsCenter in the Amazon Web Services Systems Manager User Guide. Operations engineers and IT professionals use Amazon Web Services Systems Manager OpsCenter to view, investigate, and remediate operational issues impacting the performance and health of their Amazon Web Services resources. For more information, see Amazon Web Services Systems Manager OpsCenter in the Amazon Web Services Systems Manager User Guide.
    ///
    /// Parameters:
    ///   - actualEndTime: The time a runbook workflow ended. Currently reported only for the OpsItem type /aws/changerequest.
    ///   - actualStartTime: The time a runbook workflow started. Currently reported only for the OpsItem type /aws/changerequest.
    ///   - category: Specify a new category for an OpsItem.
    ///   - description: User-defined text that contains information about the OpsItem, in Markdown format.
    ///   - notifications: The Amazon Resource Name (ARN) of an SNS topic where notifications are sent when this OpsItem is edited or changed.
    ///   - operationalData: Add new keys or edit existing key-value pairs of the OperationalData map in the OpsItem object. Operational data is custom data that provides useful reference details about the OpsItem. For example, you can specify log files, error strings, license keys, troubleshooting tips, or other relevant data. You enter operational data as key-value pairs. The key has a maximum length of 128 characters. The value has a maximum size of 20 KB.  Operational data keys can't begin with the following: amazon, aws, amzn, ssm, /amazon, /aws, /amzn, /ssm.  You can choose to make the data searchable by other users in the account or you can restrict search access. Searchable data means that all users with access to the OpsItem Overview page (as provided by the DescribeOpsItems API operation) can view and search on the specified data. Operational data that isn't searchable is only viewable by users who have access to the OpsItem (as provided by the GetOpsItem API operation). Use the /aws/resources key in OperationalData to specify a related resource in the request. Use the /aws/automations key in OperationalData to associate an Automation runbook with the OpsItem. To view Amazon Web Services CLI example commands that use these keys, see Creating OpsItems manually in the Amazon Web Services Systems Manager User Guide.
    ///   - operationalDataToDelete: Keys that you want to remove from the OperationalData map.
    ///   - opsItemArn: The OpsItem Amazon Resource Name (ARN).
    ///   - opsItemId: The ID of the OpsItem.
    ///   - plannedEndTime: The time specified in a change request for a runbook workflow to end. Currently supported only for the OpsItem type /aws/changerequest.
    ///   - plannedStartTime: The time specified in a change request for a runbook workflow to start. Currently supported only for the OpsItem type /aws/changerequest.
    ///   - priority: The importance of this OpsItem in relation to other OpsItems in the system.
    ///   - relatedOpsItems: One or more OpsItems that share something in common with the current OpsItems. For example, related OpsItems can include OpsItems with similar error messages, impacted resources, or statuses for the impacted resource.
    ///   - severity: Specify a new severity for an OpsItem.
    ///   - status: The OpsItem status. For more information, see Editing OpsItem details in the Amazon Web Services Systems Manager User Guide.
    ///   - title: A short heading that describes the nature of the OpsItem and the impacted resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOpsItem(
        actualEndTime: Date? = nil,
        actualStartTime: Date? = nil,
        category: String? = nil,
        description: String? = nil,
        notifications: [OpsItemNotification]? = nil,
        operationalData: [String: OpsItemDataValue]? = nil,
        operationalDataToDelete: [String]? = nil,
        opsItemArn: String? = nil,
        opsItemId: String,
        plannedEndTime: Date? = nil,
        plannedStartTime: Date? = nil,
        priority: Int? = nil,
        relatedOpsItems: [RelatedOpsItem]? = nil,
        severity: String? = nil,
        status: OpsItemStatus? = nil,
        title: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOpsItemResponse {
        let input = UpdateOpsItemRequest(
            actualEndTime: actualEndTime, 
            actualStartTime: actualStartTime, 
            category: category, 
            description: description, 
            notifications: notifications, 
            operationalData: operationalData, 
            operationalDataToDelete: operationalDataToDelete, 
            opsItemArn: opsItemArn, 
            opsItemId: opsItemId, 
            plannedEndTime: plannedEndTime, 
            plannedStartTime: plannedStartTime, 
            priority: priority, 
            relatedOpsItems: relatedOpsItems, 
            severity: severity, 
            status: status, 
            title: title
        )
        return try await self.updateOpsItem(input, logger: logger)
    }

    /// Amazon Web Services Systems Manager calls this API operation when you edit OpsMetadata in Application Manager.
    @Sendable
    @inlinable
    public func updateOpsMetadata(_ input: UpdateOpsMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateOpsMetadataResult {
        try await self.client.execute(
            operation: "UpdateOpsMetadata", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Amazon Web Services Systems Manager calls this API operation when you edit OpsMetadata in Application Manager.
    ///
    /// Parameters:
    ///   - keysToDelete: The metadata keys to delete from the OpsMetadata object.
    ///   - metadataToUpdate: Metadata to add to an OpsMetadata object.
    ///   - opsMetadataArn: The Amazon Resource Name (ARN) of the OpsMetadata Object to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateOpsMetadata(
        keysToDelete: [String]? = nil,
        metadataToUpdate: [String: MetadataValue]? = nil,
        opsMetadataArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateOpsMetadataResult {
        let input = UpdateOpsMetadataRequest(
            keysToDelete: keysToDelete, 
            metadataToUpdate: metadataToUpdate, 
            opsMetadataArn: opsMetadataArn
        )
        return try await self.updateOpsMetadata(input, logger: logger)
    }

    /// Modifies an existing patch baseline. Fields not specified in the request are left unchanged.  For information about valid key-value pairs in PatchFilters for each supported operating system type, see PatchFilter.
    @Sendable
    @inlinable
    public func updatePatchBaseline(_ input: UpdatePatchBaselineRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePatchBaselineResult {
        try await self.client.execute(
            operation: "UpdatePatchBaseline", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies an existing patch baseline. Fields not specified in the request are left unchanged.  For information about valid key-value pairs in PatchFilters for each supported operating system type, see PatchFilter.
    ///
    /// Parameters:
    ///   - approvalRules: A set of rules used to include patches in the baseline.
    ///   - approvedPatches: A list of explicitly approved patches for the baseline. For information about accepted formats for lists of approved patches and rejected patches, see Package name formats for approved and rejected patch lists in the Amazon Web Services Systems Manager User Guide.
    ///   - approvedPatchesComplianceLevel: Assigns a new compliance severity level to an existing patch baseline.
    ///   - approvedPatchesEnableNonSecurity: Indicates whether the list of approved patches includes non-security updates that should be applied to the managed nodes. The default value is false. Applies to Linux managed nodes only.
    ///   - availableSecurityUpdatesComplianceStatus: Indicates the status to be assigned to security patches that are available but not approved because they don't meet the installation criteria specified in the patch baseline. Example scenario: Security patches that you might want installed can be skipped if you have specified a long period to wait after a patch is released before installation. If an update to the patch is released during your specified waiting period, the waiting period for installing the patch starts over. If the waiting period is too long, multiple versions of the patch could be released but never installed. Supported for Windows Server managed nodes only.
    ///   - baselineId: The ID of the patch baseline to update.
    ///   - description: A description of the patch baseline.
    ///   - globalFilters: A set of global filters used to include patches in the baseline.  The GlobalFilters parameter can be configured only by using the CLI or an Amazon Web Services SDK. It can't be configured from the Patch Manager console, and its value isn't displayed in the console.
    ///   - name: The name of the patch baseline.
    ///   - rejectedPatches: A list of explicitly rejected patches for the baseline. For information about accepted formats for lists of approved patches and rejected patches, see Package name formats for approved and rejected patch lists in the Amazon Web Services Systems Manager User Guide.
    ///   - rejectedPatchesAction: The action for Patch Manager to take on patches included in the RejectedPackages list.  ALLOW_AS_DEPENDENCY   Linux and macOS: A package in the rejected patches list is installed only if it is a dependency of another package. It is considered compliant with the patch baseline, and its status is reported as INSTALLED_OTHER. This is the default action if no option is specified.  Windows Server: Windows Server doesn't support the concept of package dependencies. If a package in the rejected patches list and already installed on the node, its status is reported as INSTALLED_OTHER. Any package not already installed on the node is skipped. This is the default action if no option is specified.  BLOCK   All OSs: Packages in the rejected patches list, and packages that include them as dependencies, aren't installed by Patch Manager under any circumstances. If a package was installed before it was added to the rejected patches list, or is installed outside of Patch Manager afterward, it's considered noncompliant with the patch baseline and its status is reported as INSTALLED_REJECTED.
    ///   - replace: If True, then all fields that are required by the CreatePatchBaseline operation are also required for this API request. Optional fields that aren't specified are set to null.
    ///   - sources: Information about the patches to use to update the managed nodes, including target operating systems and source repositories. Applies to Linux managed nodes only.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePatchBaseline(
        approvalRules: PatchRuleGroup? = nil,
        approvedPatches: [String]? = nil,
        approvedPatchesComplianceLevel: PatchComplianceLevel? = nil,
        approvedPatchesEnableNonSecurity: Bool? = nil,
        availableSecurityUpdatesComplianceStatus: PatchComplianceStatus? = nil,
        baselineId: String,
        description: String? = nil,
        globalFilters: PatchFilterGroup? = nil,
        name: String? = nil,
        rejectedPatches: [String]? = nil,
        rejectedPatchesAction: PatchAction? = nil,
        replace: Bool? = nil,
        sources: [PatchSource]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePatchBaselineResult {
        let input = UpdatePatchBaselineRequest(
            approvalRules: approvalRules, 
            approvedPatches: approvedPatches, 
            approvedPatchesComplianceLevel: approvedPatchesComplianceLevel, 
            approvedPatchesEnableNonSecurity: approvedPatchesEnableNonSecurity, 
            availableSecurityUpdatesComplianceStatus: availableSecurityUpdatesComplianceStatus, 
            baselineId: baselineId, 
            description: description, 
            globalFilters: globalFilters, 
            name: name, 
            rejectedPatches: rejectedPatches, 
            rejectedPatchesAction: rejectedPatchesAction, 
            replace: replace, 
            sources: sources
        )
        return try await self.updatePatchBaseline(input, logger: logger)
    }

    /// Update a resource data sync. After you create a resource data sync for a Region, you can't change the account options for that sync. For example, if you create a sync in the us-east-2 (Ohio) Region and you choose the Include only the current account option, you can't edit that sync later and choose the Include all accounts from my Organizations configuration option. Instead, you must delete the first resource data sync, and create a new one.  This API operation only supports a resource data sync that was created with a SyncFromSource SyncType.
    @Sendable
    @inlinable
    public func updateResourceDataSync(_ input: UpdateResourceDataSyncRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateResourceDataSyncResult {
        try await self.client.execute(
            operation: "UpdateResourceDataSync", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update a resource data sync. After you create a resource data sync for a Region, you can't change the account options for that sync. For example, if you create a sync in the us-east-2 (Ohio) Region and you choose the Include only the current account option, you can't edit that sync later and choose the Include all accounts from my Organizations configuration option. Instead, you must delete the first resource data sync, and create a new one.  This API operation only supports a resource data sync that was created with a SyncFromSource SyncType.
    ///
    /// Parameters:
    ///   - syncName: The name of the resource data sync you want to update.
    ///   - syncSource: Specify information about the data sources to synchronize.
    ///   - syncType: The type of resource data sync. The supported SyncType is SyncFromSource.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateResourceDataSync(
        syncName: String,
        syncSource: ResourceDataSyncSource,
        syncType: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateResourceDataSyncResult {
        let input = UpdateResourceDataSyncRequest(
            syncName: syncName, 
            syncSource: syncSource, 
            syncType: syncType
        )
        return try await self.updateResourceDataSync(input, logger: logger)
    }

    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of "false". This means the user can't use this feature unless they change the setting to "true" and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the GetServiceSetting API operation to view the current value. Or, use the ResetServiceSetting to change the value back to the original value defined by the Amazon Web Services service team. Update the service setting for the account.
    @Sendable
    @inlinable
    public func updateServiceSetting(_ input: UpdateServiceSettingRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateServiceSettingResult {
        try await self.client.execute(
            operation: "UpdateServiceSetting", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    ///  ServiceSetting is an account-level setting for an Amazon Web Services service. This setting defines how a user interacts with or uses a service or a feature of a service. For example, if an Amazon Web Services service charges money to the account based on feature or service usage, then the Amazon Web Services service team might create a default setting of "false". This means the user can't use this feature unless they change the setting to "true" and intentionally opt in for a paid feature. Services map a SettingId object to a setting value. Amazon Web Services services teams define the default value for a SettingId. You can't create a new SettingId, but you can overwrite the default value if you have the ssm:UpdateServiceSetting permission for the setting. Use the GetServiceSetting API operation to view the current value. Or, use the ResetServiceSetting to change the value back to the original value defined by the Amazon Web Services service team. Update the service setting for the account.
    ///
    /// Parameters:
    ///   - settingId: The Amazon Resource Name (ARN) of the service setting to update. For example, arn:aws:ssm:us-east-1:111122223333:servicesetting/ssm/parameter-store/high-throughput-enabled. The setting ID can be one of the following.    /ssm/appmanager/appmanager-enabled     /ssm/automation/customer-script-log-destination     /ssm/automation/customer-script-log-group-name    /ssm/automation/enable-adaptive-concurrency    /ssm/documents/console/public-sharing-permission     /ssm/managed-instance/activation-tier     /ssm/managed-instance/default-ec2-instance-management-role     /ssm/opsinsights/opscenter     /ssm/parameter-store/default-parameter-tier     /ssm/parameter-store/high-throughput-enabled     Permissions to update the /ssm/managed-instance/default-ec2-instance-management-role setting should only be provided to administrators. Implement least privilege access when allowing individuals to configure or modify the Default Host Management Configuration.
    ///   - settingValue: The new value to specify for the service setting. The following list specifies the available values for each setting.   For /ssm/appmanager/appmanager-enabled, enter True or False.   For /ssm/automation/customer-script-log-destination, enter CloudWatch.   For /ssm/automation/customer-script-log-group-name, enter the name of an Amazon CloudWatch Logs log group.   For /ssm/documents/console/public-sharing-permission, enter Enable or Disable.   For /ssm/managed-instance/activation-tier, enter standard or advanced.   For /ssm/managed-instance/default-ec2-instance-management-role, enter the name of an IAM role.    For /ssm/opsinsights/opscenter, enter Enabled or Disabled.    For /ssm/parameter-store/default-parameter-tier, enter Standard, Advanced, or Intelligent-Tiering    For /ssm/parameter-store/high-throughput-enabled, enter true or false.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateServiceSetting(
        settingId: String,
        settingValue: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateServiceSettingResult {
        let input = UpdateServiceSettingRequest(
            settingId: settingId, 
            settingValue: settingValue
        )
        return try await self.updateServiceSetting(input, logger: logger)
    }
}

extension SSM {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: SSM, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension SSM {
    /// Return PaginatorSequence for operation ``describeActivations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActivationsPaginator(
        _ input: DescribeActivationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeActivationsRequest, DescribeActivationsResult> {
        return .init(
            input: input,
            command: self.describeActivations,
            inputKey: \DescribeActivationsRequest.nextToken,
            outputKey: \DescribeActivationsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeActivations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: A filter to view information about your activations.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActivationsPaginator(
        filters: [DescribeActivationsFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeActivationsRequest, DescribeActivationsResult> {
        let input = DescribeActivationsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeActivationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeAssociationExecutionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAssociationExecutionTargetsPaginator(
        _ input: DescribeAssociationExecutionTargetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeAssociationExecutionTargetsRequest, DescribeAssociationExecutionTargetsResult> {
        return .init(
            input: input,
            command: self.describeAssociationExecutionTargets,
            inputKey: \DescribeAssociationExecutionTargetsRequest.nextToken,
            outputKey: \DescribeAssociationExecutionTargetsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeAssociationExecutionTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - associationId: The association ID that includes the execution for which you want to view details.
    ///   - executionId: The execution ID for which you want to view details.
    ///   - filters: Filters for the request. You can specify the following filters and values. Status (EQUAL) ResourceId (EQUAL) ResourceType (EQUAL)
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAssociationExecutionTargetsPaginator(
        associationId: String,
        executionId: String,
        filters: [AssociationExecutionTargetsFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeAssociationExecutionTargetsRequest, DescribeAssociationExecutionTargetsResult> {
        let input = DescribeAssociationExecutionTargetsRequest(
            associationId: associationId, 
            executionId: executionId, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeAssociationExecutionTargetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeAssociationExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAssociationExecutionsPaginator(
        _ input: DescribeAssociationExecutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeAssociationExecutionsRequest, DescribeAssociationExecutionsResult> {
        return .init(
            input: input,
            command: self.describeAssociationExecutions,
            inputKey: \DescribeAssociationExecutionsRequest.nextToken,
            outputKey: \DescribeAssociationExecutionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeAssociationExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - associationId: The association ID for which you want to view execution history details.
    ///   - filters: Filters for the request. You can specify the following filters and values. ExecutionId (EQUAL) Status (EQUAL) CreatedTime (EQUAL, GREATER_THAN, LESS_THAN)
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAssociationExecutionsPaginator(
        associationId: String,
        filters: [AssociationExecutionFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeAssociationExecutionsRequest, DescribeAssociationExecutionsResult> {
        let input = DescribeAssociationExecutionsRequest(
            associationId: associationId, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeAssociationExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeAutomationExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAutomationExecutionsPaginator(
        _ input: DescribeAutomationExecutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeAutomationExecutionsRequest, DescribeAutomationExecutionsResult> {
        return .init(
            input: input,
            command: self.describeAutomationExecutions,
            inputKey: \DescribeAutomationExecutionsRequest.nextToken,
            outputKey: \DescribeAutomationExecutionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeAutomationExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Filters used to limit the scope of executions that are requested.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAutomationExecutionsPaginator(
        filters: [AutomationExecutionFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeAutomationExecutionsRequest, DescribeAutomationExecutionsResult> {
        let input = DescribeAutomationExecutionsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeAutomationExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeAutomationStepExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAutomationStepExecutionsPaginator(
        _ input: DescribeAutomationStepExecutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeAutomationStepExecutionsRequest, DescribeAutomationStepExecutionsResult> {
        return .init(
            input: input,
            command: self.describeAutomationStepExecutions,
            inputKey: \DescribeAutomationStepExecutionsRequest.nextToken,
            outputKey: \DescribeAutomationStepExecutionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeAutomationStepExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - automationExecutionId: The Automation execution ID for which you want step execution descriptions.
    ///   - filters: One or more filters to limit the number of step executions returned by the request.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - reverseOrder: Indicates whether to list step executions in reverse order by start time. The default value is 'false'.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAutomationStepExecutionsPaginator(
        automationExecutionId: String,
        filters: [StepExecutionFilter]? = nil,
        maxResults: Int? = nil,
        reverseOrder: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeAutomationStepExecutionsRequest, DescribeAutomationStepExecutionsResult> {
        let input = DescribeAutomationStepExecutionsRequest(
            automationExecutionId: automationExecutionId, 
            filters: filters, 
            maxResults: maxResults, 
            reverseOrder: reverseOrder
        )
        return self.describeAutomationStepExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeAvailablePatches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAvailablePatchesPaginator(
        _ input: DescribeAvailablePatchesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeAvailablePatchesRequest, DescribeAvailablePatchesResult> {
        return .init(
            input: input,
            command: self.describeAvailablePatches,
            inputKey: \DescribeAvailablePatchesRequest.nextToken,
            outputKey: \DescribeAvailablePatchesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeAvailablePatches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair.  Windows Server  Supported keys for Windows Server managed node patches include the following:     PATCH_SET   Sample values: OS | APPLICATION      PRODUCT   Sample values: WindowsServer2012 | Office 2010 | MicrosoftDefenderAntivirus      PRODUCT_FAMILY   Sample values: Windows | Office      MSRC_SEVERITY   Sample values: ServicePacks | Important | Moderate      CLASSIFICATION   Sample values: ServicePacks | SecurityUpdates | DefinitionUpdates      PATCH_ID   Sample values: KB123456 | KB4516046     Linux   When specifying filters for Linux patches, you must specify a key-pair for PRODUCT. For example, using the Command Line Interface (CLI), the following command fails:  aws ssm describe-available-patches --filters Key=CVE_ID,Values=CVE-2018-3615  However, the following command succeeds:  aws ssm describe-available-patches --filters Key=PRODUCT,Values=AmazonLinux2018.03 Key=CVE_ID,Values=CVE-2018-3615   Supported keys for Linux managed node patches include the following:     PRODUCT   Sample values: AmazonLinux2018.03 | AmazonLinux2.0      NAME   Sample values: kernel-headers | samba-python | php      SEVERITY   Sample values: Critical | Important | Medium | Low      EPOCH   Sample values: 0 | 1      VERSION   Sample values: 78.6.1 | 4.10.16      RELEASE   Sample values: 9.56.amzn1 | 1.amzn2      ARCH   Sample values: i686 | x86_64      REPOSITORY   Sample values: Core | Updates      ADVISORY_ID   Sample values: ALAS-2018-1058 | ALAS2-2021-1594      CVE_ID   Sample values: CVE-2018-3615 | CVE-2020-1472      BUGZILLA_ID   Sample values: 1463241
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describeAvailablePatchesPaginator(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeAvailablePatchesRequest, DescribeAvailablePatchesResult> {
        let input = DescribeAvailablePatchesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeAvailablePatchesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeEffectiveInstanceAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeEffectiveInstanceAssociationsPaginator(
        _ input: DescribeEffectiveInstanceAssociationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeEffectiveInstanceAssociationsRequest, DescribeEffectiveInstanceAssociationsResult> {
        return .init(
            input: input,
            command: self.describeEffectiveInstanceAssociations,
            inputKey: \DescribeEffectiveInstanceAssociationsRequest.nextToken,
            outputKey: \DescribeEffectiveInstanceAssociationsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeEffectiveInstanceAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceId: The managed node ID for which you want to view all associations.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeEffectiveInstanceAssociationsPaginator(
        instanceId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeEffectiveInstanceAssociationsRequest, DescribeEffectiveInstanceAssociationsResult> {
        let input = DescribeEffectiveInstanceAssociationsRequest(
            instanceId: instanceId, 
            maxResults: maxResults
        )
        return self.describeEffectiveInstanceAssociationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeEffectivePatchesForPatchBaseline(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeEffectivePatchesForPatchBaselinePaginator(
        _ input: DescribeEffectivePatchesForPatchBaselineRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeEffectivePatchesForPatchBaselineRequest, DescribeEffectivePatchesForPatchBaselineResult> {
        return .init(
            input: input,
            command: self.describeEffectivePatchesForPatchBaseline,
            inputKey: \DescribeEffectivePatchesForPatchBaselineRequest.nextToken,
            outputKey: \DescribeEffectivePatchesForPatchBaselineResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeEffectivePatchesForPatchBaseline(_:logger:)``.
    ///
    /// - Parameters:
    ///   - baselineId: The ID of the patch baseline to retrieve the effective patches for.
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describeEffectivePatchesForPatchBaselinePaginator(
        baselineId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeEffectivePatchesForPatchBaselineRequest, DescribeEffectivePatchesForPatchBaselineResult> {
        let input = DescribeEffectivePatchesForPatchBaselineRequest(
            baselineId: baselineId, 
            maxResults: maxResults
        )
        return self.describeEffectivePatchesForPatchBaselinePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstanceAssociationsStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstanceAssociationsStatusPaginator(
        _ input: DescribeInstanceAssociationsStatusRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstanceAssociationsStatusRequest, DescribeInstanceAssociationsStatusResult> {
        return .init(
            input: input,
            command: self.describeInstanceAssociationsStatus,
            inputKey: \DescribeInstanceAssociationsStatusRequest.nextToken,
            outputKey: \DescribeInstanceAssociationsStatusResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstanceAssociationsStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceId: The managed node IDs for which you want association status information.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstanceAssociationsStatusPaginator(
        instanceId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstanceAssociationsStatusRequest, DescribeInstanceAssociationsStatusResult> {
        let input = DescribeInstanceAssociationsStatusRequest(
            instanceId: instanceId, 
            maxResults: maxResults
        )
        return self.describeInstanceAssociationsStatusPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstanceInformation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstanceInformationPaginator(
        _ input: DescribeInstanceInformationRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstanceInformationRequest, DescribeInstanceInformationResult> {
        return .init(
            input: input,
            command: self.describeInstanceInformation,
            inputKey: \DescribeInstanceInformationRequest.nextToken,
            outputKey: \DescribeInstanceInformationResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstanceInformation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of managed nodes. You can filter based on tags applied to your managed nodes. Tag filters can't be combined with other filter types. Use this Filters data type instead of InstanceInformationFilterList, which is deprecated.
    ///   - instanceInformationFilterList: This is a legacy method. We recommend that you don't use this method. Instead, use the Filters data type. Filters enables you to return node information by filtering based on tags applied to managed nodes.  Attempting to use InstanceInformationFilterList and Filters leads to an exception error.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results. The default value is 10 items.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstanceInformationPaginator(
        filters: [InstanceInformationStringFilter]? = nil,
        instanceInformationFilterList: [InstanceInformationFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstanceInformationRequest, DescribeInstanceInformationResult> {
        let input = DescribeInstanceInformationRequest(
            filters: filters, 
            instanceInformationFilterList: instanceInformationFilterList, 
            maxResults: maxResults
        )
        return self.describeInstanceInformationPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstancePatchStates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchStatesPaginator(
        _ input: DescribeInstancePatchStatesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchStatesRequest, DescribeInstancePatchStatesResult> {
        return .init(
            input: input,
            command: self.describeInstancePatchStates,
            inputKey: \DescribeInstancePatchStatesRequest.nextToken,
            outputKey: \DescribeInstancePatchStatesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstancePatchStates(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceIds: The ID of the managed node for which patch state information should be retrieved.
    ///   - maxResults: The maximum number of managed nodes to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchStatesPaginator(
        instanceIds: [String],
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchStatesRequest, DescribeInstancePatchStatesResult> {
        let input = DescribeInstancePatchStatesRequest(
            instanceIds: instanceIds, 
            maxResults: maxResults
        )
        return self.describeInstancePatchStatesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstancePatchStatesForPatchGroup(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchStatesForPatchGroupPaginator(
        _ input: DescribeInstancePatchStatesForPatchGroupRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchStatesForPatchGroupRequest, DescribeInstancePatchStatesForPatchGroupResult> {
        return .init(
            input: input,
            command: self.describeInstancePatchStatesForPatchGroup,
            inputKey: \DescribeInstancePatchStatesForPatchGroupRequest.nextToken,
            outputKey: \DescribeInstancePatchStatesForPatchGroupResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstancePatchStatesForPatchGroup(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each entry in the array is a structure containing:   Key (string between 1 and 200 characters)   Values (array containing a single string)   Type (string "Equal", "NotEqual", "LessThan", "GreaterThan")
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - patchGroup: The name of the patch group for which the patch state information should be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchStatesForPatchGroupPaginator(
        filters: [InstancePatchStateFilter]? = nil,
        maxResults: Int? = nil,
        patchGroup: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchStatesForPatchGroupRequest, DescribeInstancePatchStatesForPatchGroupResult> {
        let input = DescribeInstancePatchStatesForPatchGroupRequest(
            filters: filters, 
            maxResults: maxResults, 
            patchGroup: patchGroup
        )
        return self.describeInstancePatchStatesForPatchGroupPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstancePatches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchesPaginator(
        _ input: DescribeInstancePatchesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchesRequest, DescribeInstancePatchesResult> {
        return .init(
            input: input,
            command: self.describeInstancePatches,
            inputKey: \DescribeInstancePatchesRequest.nextToken,
            outputKey: \DescribeInstancePatchesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstancePatches(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribeInstancePatchesinclude the following:     Classification   Sample values: Security | SecurityUpdates      KBId   Sample values: KB4480056 | java-1.7.0-openjdk.x86_64      Severity   Sample values: Important | Medium | Low      State   Sample values: Installed | InstalledOther | InstalledPendingReboot  For lists of all State values, see Patch compliance state values in the Amazon Web Services Systems Manager User Guide.
    ///   - instanceId: The ID of the managed node whose patch state information should be retrieved.
    ///   - maxResults: The maximum number of patches to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePatchesPaginator(
        filters: [PatchOrchestratorFilter]? = nil,
        instanceId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstancePatchesRequest, DescribeInstancePatchesResult> {
        let input = DescribeInstancePatchesRequest(
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults
        )
        return self.describeInstancePatchesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInstanceProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePropertiesPaginator(
        _ input: DescribeInstancePropertiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInstancePropertiesRequest, DescribeInstancePropertiesResult> {
        return .init(
            input: input,
            command: self.describeInstanceProperties,
            inputKey: \DescribeInstancePropertiesRequest.nextToken,
            outputKey: \DescribeInstancePropertiesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInstanceProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filtersWithOperator: The request filters to use with the operator.
    ///   - instancePropertyFilterList: An array of instance property filters.
    ///   - maxResults: The maximum number of items to return for the call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInstancePropertiesPaginator(
        filtersWithOperator: [InstancePropertyStringFilter]? = nil,
        instancePropertyFilterList: [InstancePropertyFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInstancePropertiesRequest, DescribeInstancePropertiesResult> {
        let input = DescribeInstancePropertiesRequest(
            filtersWithOperator: filtersWithOperator, 
            instancePropertyFilterList: instancePropertyFilterList, 
            maxResults: maxResults
        )
        return self.describeInstancePropertiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeInventoryDeletions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInventoryDeletionsPaginator(
        _ input: DescribeInventoryDeletionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeInventoryDeletionsRequest, DescribeInventoryDeletionsResult> {
        return .init(
            input: input,
            command: self.describeInventoryDeletions,
            inputKey: \DescribeInventoryDeletionsRequest.nextToken,
            outputKey: \DescribeInventoryDeletionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeInventoryDeletions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - deletionId: Specify the delete inventory ID for which you want information. This ID was returned by the DeleteInventory operation.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeInventoryDeletionsPaginator(
        deletionId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeInventoryDeletionsRequest, DescribeInventoryDeletionsResult> {
        let input = DescribeInventoryDeletionsRequest(
            deletionId: deletionId, 
            maxResults: maxResults
        )
        return self.describeInventoryDeletionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutionTaskInvocations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionTaskInvocationsPaginator(
        _ input: DescribeMaintenanceWindowExecutionTaskInvocationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionTaskInvocationsRequest, DescribeMaintenanceWindowExecutionTaskInvocationsResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowExecutionTaskInvocations,
            inputKey: \DescribeMaintenanceWindowExecutionTaskInvocationsRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowExecutionTaskInvocationsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutionTaskInvocations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Optional filters used to scope down the returned task invocations. The supported filter key is STATUS with the corresponding values PENDING, IN_PROGRESS, SUCCESS, FAILED, TIMED_OUT, CANCELLING, and CANCELLED.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - taskId: The ID of the specific task in the maintenance window task that should be retrieved.
    ///   - windowExecutionId: The ID of the maintenance window execution the task is part of.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionTaskInvocationsPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        taskId: String,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionTaskInvocationsRequest, DescribeMaintenanceWindowExecutionTaskInvocationsResult> {
        let input = DescribeMaintenanceWindowExecutionTaskInvocationsRequest(
            filters: filters, 
            maxResults: maxResults, 
            taskId: taskId, 
            windowExecutionId: windowExecutionId
        )
        return self.describeMaintenanceWindowExecutionTaskInvocationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutionTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionTasksPaginator(
        _ input: DescribeMaintenanceWindowExecutionTasksRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionTasksRequest, DescribeMaintenanceWindowExecutionTasksResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowExecutionTasks,
            inputKey: \DescribeMaintenanceWindowExecutionTasksRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowExecutionTasksResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutionTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Optional filters used to scope down the returned tasks. The supported filter key is STATUS with the corresponding values PENDING, IN_PROGRESS, SUCCESS, FAILED, TIMED_OUT, CANCELLING, and CANCELLED.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - windowExecutionId: The ID of the maintenance window execution whose task executions should be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionTasksPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        windowExecutionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionTasksRequest, DescribeMaintenanceWindowExecutionTasksResult> {
        let input = DescribeMaintenanceWindowExecutionTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            windowExecutionId: windowExecutionId
        )
        return self.describeMaintenanceWindowExecutionTasksPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionsPaginator(
        _ input: DescribeMaintenanceWindowExecutionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionsRequest, DescribeMaintenanceWindowExecutionsResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowExecutions,
            inputKey: \DescribeMaintenanceWindowExecutionsRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowExecutionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowExecutions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each entry in the array is a structure containing:   Key. A string between 1 and 128 characters. Supported keys include ExecutedBefore and ExecutedAfter.   Values. An array of strings, each between 1 and 256 characters. Supported values are date/time strings in a valid ISO 8601 date/time format, such as 2024-11-04T05:00:00Z.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - windowId: The ID of the maintenance window whose executions should be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowExecutionsPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowExecutionsRequest, DescribeMaintenanceWindowExecutionsResult> {
        let input = DescribeMaintenanceWindowExecutionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            windowId: windowId
        )
        return self.describeMaintenanceWindowExecutionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowSchedule(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowSchedulePaginator(
        _ input: DescribeMaintenanceWindowScheduleRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowScheduleRequest, DescribeMaintenanceWindowScheduleResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowSchedule,
            inputKey: \DescribeMaintenanceWindowScheduleRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowScheduleResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowSchedule(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Filters used to limit the range of results. For example, you can limit maintenance window executions to only those scheduled before or after a certain date and time.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resourceType: The type of resource you want to retrieve information about. For example, INSTANCE.
    ///   - targets: The managed node ID or key-value pair to retrieve information about.
    ///   - windowId: The ID of the maintenance window to retrieve information about.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowSchedulePaginator(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        resourceType: MaintenanceWindowResourceType? = nil,
        targets: [Target]? = nil,
        windowId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowScheduleRequest, DescribeMaintenanceWindowScheduleResult> {
        let input = DescribeMaintenanceWindowScheduleRequest(
            filters: filters, 
            maxResults: maxResults, 
            resourceType: resourceType, 
            targets: targets, 
            windowId: windowId
        )
        return self.describeMaintenanceWindowSchedulePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowTargetsPaginator(
        _ input: DescribeMaintenanceWindowTargetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowTargetsRequest, DescribeMaintenanceWindowTargetsResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowTargets,
            inputKey: \DescribeMaintenanceWindowTargetsRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowTargetsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowTargets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Optional filters that can be used to narrow down the scope of the returned window targets. The supported filter keys are Type, WindowTargetId, and OwnerInformation.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - windowId: The ID of the maintenance window whose targets should be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowTargetsPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowTargetsRequest, DescribeMaintenanceWindowTargetsResult> {
        let input = DescribeMaintenanceWindowTargetsRequest(
            filters: filters, 
            maxResults: maxResults, 
            windowId: windowId
        )
        return self.describeMaintenanceWindowTargetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowTasksPaginator(
        _ input: DescribeMaintenanceWindowTasksRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowTasksRequest, DescribeMaintenanceWindowTasksResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowTasks,
            inputKey: \DescribeMaintenanceWindowTasksRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowTasksResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowTasks(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Optional filters used to narrow down the scope of the returned tasks. The supported filter keys are WindowTaskId, TaskArn, Priority, and TaskType.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - windowId: The ID of the maintenance window whose tasks should be retrieved.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowTasksPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        windowId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowTasksRequest, DescribeMaintenanceWindowTasksResult> {
        let input = DescribeMaintenanceWindowTasksRequest(
            filters: filters, 
            maxResults: maxResults, 
            windowId: windowId
        )
        return self.describeMaintenanceWindowTasksPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindows(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowsPaginator(
        _ input: DescribeMaintenanceWindowsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowsRequest, DescribeMaintenanceWindowsResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindows,
            inputKey: \DescribeMaintenanceWindowsRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindows(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Optional filters used to narrow down the scope of the returned maintenance windows. Supported filter keys are Name and Enabled. For example, Name=MyMaintenanceWindow and Enabled=True.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowsPaginator(
        filters: [MaintenanceWindowFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowsRequest, DescribeMaintenanceWindowsResult> {
        let input = DescribeMaintenanceWindowsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describeMaintenanceWindowsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeMaintenanceWindowsForTarget(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowsForTargetPaginator(
        _ input: DescribeMaintenanceWindowsForTargetRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowsForTargetRequest, DescribeMaintenanceWindowsForTargetResult> {
        return .init(
            input: input,
            command: self.describeMaintenanceWindowsForTarget,
            inputKey: \DescribeMaintenanceWindowsForTargetRequest.nextToken,
            outputKey: \DescribeMaintenanceWindowsForTargetResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeMaintenanceWindowsForTarget(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resourceType: The type of resource you want to retrieve information about. For example, INSTANCE.
    ///   - targets: The managed node ID or key-value pair to retrieve information about.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeMaintenanceWindowsForTargetPaginator(
        maxResults: Int? = nil,
        resourceType: MaintenanceWindowResourceType,
        targets: [Target],
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeMaintenanceWindowsForTargetRequest, DescribeMaintenanceWindowsForTargetResult> {
        let input = DescribeMaintenanceWindowsForTargetRequest(
            maxResults: maxResults, 
            resourceType: resourceType, 
            targets: targets
        )
        return self.describeMaintenanceWindowsForTargetPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeOpsItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOpsItemsPaginator(
        _ input: DescribeOpsItemsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeOpsItemsRequest, DescribeOpsItemsResponse> {
        return .init(
            input: input,
            command: self.describeOpsItems,
            inputKey: \DescribeOpsItemsRequest.nextToken,
            outputKey: \DescribeOpsItemsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeOpsItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - opsItemFilters: One or more filters to limit the response.   Key: CreatedTime Operations: GreaterThan, LessThan   Key: LastModifiedBy Operations: Contains, Equals   Key: LastModifiedTime Operations: GreaterThan, LessThan   Key: Priority Operations: Equals   Key: Source Operations: Contains, Equals   Key: Status Operations: Equals   Key: Title* Operations: Equals,Contains   Key: OperationalData** Operations: Equals   Key: OperationalDataKey Operations: Equals   Key: OperationalDataValue Operations: Equals, Contains   Key: OpsItemId Operations: Equals   Key: ResourceId Operations: Contains   Key: AutomationId Operations: Equals   Key: AccountId Operations: Equals   *The Equals operator for Title matches the first 100 characters. If you specify more than 100 characters, they system returns an error that the filter value exceeds the length limit. **If you filter the response by using the OperationalData operator, specify a key-value pair by using the following JSON format: {"key":"key_name","value":"a_value"}
    ///   - logger: Logger used for logging
    @inlinable
    public func describeOpsItemsPaginator(
        maxResults: Int? = nil,
        opsItemFilters: [OpsItemFilter]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeOpsItemsRequest, DescribeOpsItemsResponse> {
        let input = DescribeOpsItemsRequest(
            maxResults: maxResults, 
            opsItemFilters: opsItemFilters
        )
        return self.describeOpsItemsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeParameters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeParametersPaginator(
        _ input: DescribeParametersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeParametersRequest, DescribeParametersResult> {
        return .init(
            input: input,
            command: self.describeParameters,
            inputKey: \DescribeParametersRequest.nextToken,
            outputKey: \DescribeParametersResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeParameters(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: This data type is deprecated. Instead, use ParameterFilters.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - parameterFilters: Filters to limit the request results.
    ///   - shared: Lists parameters that are shared with you.  By default when using this option, the command returns parameters that have been shared using a standard Resource Access Manager Resource Share. In order for a parameter that was shared using the PutResourcePolicy command to be returned, the associated RAM Resource Share Created From Policy must have been promoted to a standard Resource Share using the RAM PromoteResourceShareCreatedFromPolicy API operation. For more information about sharing parameters, see Working with shared parameters in the Amazon Web Services Systems Manager User Guide.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeParametersPaginator(
        filters: [ParametersFilter]? = nil,
        maxResults: Int? = nil,
        parameterFilters: [ParameterStringFilter]? = nil,
        shared: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeParametersRequest, DescribeParametersResult> {
        let input = DescribeParametersRequest(
            filters: filters, 
            maxResults: maxResults, 
            parameterFilters: parameterFilters, 
            shared: shared
        )
        return self.describeParametersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describePatchBaselines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchBaselinesPaginator(
        _ input: DescribePatchBaselinesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribePatchBaselinesRequest, DescribePatchBaselinesResult> {
        return .init(
            input: input,
            command: self.describePatchBaselines,
            inputKey: \DescribePatchBaselinesRequest.nextToken,
            outputKey: \DescribePatchBaselinesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describePatchBaselines(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribePatchBaselines include the following:     NAME_PREFIX   Sample values: AWS- | My-      OWNER   Sample values: AWS | Self      OPERATING_SYSTEM   Sample values: AMAZON_LINUX | SUSE | WINDOWS
    ///   - maxResults: The maximum number of patch baselines to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchBaselinesPaginator(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribePatchBaselinesRequest, DescribePatchBaselinesResult> {
        let input = DescribePatchBaselinesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describePatchBaselinesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describePatchGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchGroupsPaginator(
        _ input: DescribePatchGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribePatchGroupsRequest, DescribePatchGroupsResult> {
        return .init(
            input: input,
            command: self.describePatchGroups,
            inputKey: \DescribePatchGroupsRequest.nextToken,
            outputKey: \DescribePatchGroupsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describePatchGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: Each element in the array is a structure containing a key-value pair. Supported keys for DescribePatchGroups include the following:     NAME_PREFIX   Sample values: AWS- | My-.     OPERATING_SYSTEM   Sample values: AMAZON_LINUX | SUSE | WINDOWS
    ///   - maxResults: The maximum number of patch groups to return (per page).
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchGroupsPaginator(
        filters: [PatchOrchestratorFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribePatchGroupsRequest, DescribePatchGroupsResult> {
        let input = DescribePatchGroupsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.describePatchGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describePatchProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchPropertiesPaginator(
        _ input: DescribePatchPropertiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribePatchPropertiesRequest, DescribePatchPropertiesResult> {
        return .init(
            input: input,
            command: self.describePatchProperties,
            inputKey: \DescribePatchPropertiesRequest.nextToken,
            outputKey: \DescribePatchPropertiesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describePatchProperties(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - operatingSystem: The operating system type for which to list patches.
    ///   - patchSet: Indicates whether to list patches for the Windows operating system or for applications released by Microsoft. Not applicable for the Linux or macOS operating systems.
    ///   - property: The patch property for which you want to view patch details.
    ///   - logger: Logger used for logging
    @inlinable
    public func describePatchPropertiesPaginator(
        maxResults: Int? = nil,
        operatingSystem: OperatingSystem,
        patchSet: PatchSet? = nil,
        property: PatchProperty,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribePatchPropertiesRequest, DescribePatchPropertiesResult> {
        let input = DescribePatchPropertiesRequest(
            maxResults: maxResults, 
            operatingSystem: operatingSystem, 
            patchSet: patchSet, 
            property: property
        )
        return self.describePatchPropertiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeSessions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeSessionsPaginator(
        _ input: DescribeSessionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeSessionsRequest, DescribeSessionsResponse> {
        return .init(
            input: input,
            command: self.describeSessions,
            inputKey: \DescribeSessionsRequest.nextToken,
            outputKey: \DescribeSessionsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeSessions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more filters to limit the type of sessions returned by the request.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - state: The session status to retrieve a list of sessions for. For example, "Active".
    ///   - logger: Logger used for logging
    @inlinable
    public func describeSessionsPaginator(
        filters: [SessionFilter]? = nil,
        maxResults: Int? = nil,
        state: SessionState,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeSessionsRequest, DescribeSessionsResponse> {
        let input = DescribeSessionsRequest(
            filters: filters, 
            maxResults: maxResults, 
            state: state
        )
        return self.describeSessionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getInventory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getInventoryPaginator(
        _ input: GetInventoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetInventoryRequest, GetInventoryResult> {
        return .init(
            input: input,
            command: self.getInventory,
            inputKey: \GetInventoryRequest.nextToken,
            outputKey: \GetInventoryResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getInventory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aggregators: Returns counts of inventory types based on one or more expressions. For example, if you aggregate by using an expression that uses the AWS:InstanceInformation.PlatformType type, you can see a count of how many Windows and Linux managed nodes exist in your inventoried fleet.
    ///   - filters: One or more filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resultAttributes: The list of inventory item types to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func getInventoryPaginator(
        aggregators: [InventoryAggregator]? = nil,
        filters: [InventoryFilter]? = nil,
        maxResults: Int? = nil,
        resultAttributes: [ResultAttribute]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetInventoryRequest, GetInventoryResult> {
        let input = GetInventoryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            resultAttributes: resultAttributes
        )
        return self.getInventoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getInventorySchema(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getInventorySchemaPaginator(
        _ input: GetInventorySchemaRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetInventorySchemaRequest, GetInventorySchemaResult> {
        return .init(
            input: input,
            command: self.getInventorySchema,
            inputKey: \GetInventorySchemaRequest.nextToken,
            outputKey: \GetInventorySchemaResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getInventorySchema(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aggregator: Returns inventory schemas that support aggregation. For example, this call returns the AWS:InstanceInformation type, because it supports aggregation based on the PlatformName, PlatformType, and PlatformVersion attributes.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - subType: Returns the sub-type schema for a specified inventory type.
    ///   - typeName: The type of inventory item to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func getInventorySchemaPaginator(
        aggregator: Bool? = nil,
        maxResults: Int? = nil,
        subType: Bool? = nil,
        typeName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetInventorySchemaRequest, GetInventorySchemaResult> {
        let input = GetInventorySchemaRequest(
            aggregator: aggregator, 
            maxResults: maxResults, 
            subType: subType, 
            typeName: typeName
        )
        return self.getInventorySchemaPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getOpsSummary(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getOpsSummaryPaginator(
        _ input: GetOpsSummaryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetOpsSummaryRequest, GetOpsSummaryResult> {
        return .init(
            input: input,
            command: self.getOpsSummary,
            inputKey: \GetOpsSummaryRequest.nextToken,
            outputKey: \GetOpsSummaryResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getOpsSummary(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aggregators: Optional aggregators that return counts of OpsData based on one or more expressions.
    ///   - filters: Optional filters used to scope down the returned OpsData.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resultAttributes: The OpsData data type to return.
    ///   - syncName: Specify the name of a resource data sync to get.
    ///   - logger: Logger used for logging
    @inlinable
    public func getOpsSummaryPaginator(
        aggregators: [OpsAggregator]? = nil,
        filters: [OpsFilter]? = nil,
        maxResults: Int? = nil,
        resultAttributes: [OpsResultAttribute]? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetOpsSummaryRequest, GetOpsSummaryResult> {
        let input = GetOpsSummaryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            resultAttributes: resultAttributes, 
            syncName: syncName
        )
        return self.getOpsSummaryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getParameterHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getParameterHistoryPaginator(
        _ input: GetParameterHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetParameterHistoryRequest, GetParameterHistoryResult> {
        return .init(
            input: input,
            command: self.getParameterHistory,
            inputKey: \GetParameterHistoryRequest.nextToken,
            outputKey: \GetParameterHistoryResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getParameterHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - name: The name or Amazon Resource Name (ARN) of the parameter for which you want to review history. For parameters shared with you from another account, you must use the full ARN.
    ///   - withDecryption: Return decrypted values for secure string parameters. This flag is ignored for String and StringList parameter types.
    ///   - logger: Logger used for logging
    @inlinable
    public func getParameterHistoryPaginator(
        maxResults: Int? = nil,
        name: String,
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetParameterHistoryRequest, GetParameterHistoryResult> {
        let input = GetParameterHistoryRequest(
            maxResults: maxResults, 
            name: name, 
            withDecryption: withDecryption
        )
        return self.getParameterHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getParametersByPath(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getParametersByPathPaginator(
        _ input: GetParametersByPathRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetParametersByPathRequest, GetParametersByPathResult> {
        return .init(
            input: input,
            command: self.getParametersByPath,
            inputKey: \GetParametersByPathRequest.nextToken,
            outputKey: \GetParametersByPathResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getParametersByPath(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - parameterFilters: Filters to limit the request results.  The following Key values are supported for GetParametersByPath: Type, KeyId, and Label. The following Key values aren't supported for GetParametersByPath: tag, DataType, Name, Path, and Tier.
    ///   - path: The hierarchy for the parameter. Hierarchies start with a forward slash (/). The hierarchy is the parameter name except the last part of the parameter. For the API call to succeed, the last part of the parameter name can't be in the path. A parameter name hierarchy can have a maximum of 15 levels. Here is an example of a hierarchy: /Finance/Prod/IAD/WinServ2016/license33
    ///   - recursive: Retrieve all parameters within a hierarchy.  If a user has access to a path, then the user can access all levels of that path. For example, if a user has permission to access path /a, then the user can also access /a/b. Even if a user has explicitly been denied access in IAM for parameter /a/b, they can still call the GetParametersByPath API operation recursively for /a and view /a/b.
    ///   - withDecryption: Retrieve all parameters in a hierarchy with their value decrypted.
    ///   - logger: Logger used for logging
    @inlinable
    public func getParametersByPathPaginator(
        maxResults: Int? = nil,
        parameterFilters: [ParameterStringFilter]? = nil,
        path: String,
        recursive: Bool? = nil,
        withDecryption: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetParametersByPathRequest, GetParametersByPathResult> {
        let input = GetParametersByPathRequest(
            maxResults: maxResults, 
            parameterFilters: parameterFilters, 
            path: path, 
            recursive: recursive, 
            withDecryption: withDecryption
        )
        return self.getParametersByPathPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``getResourcePolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcePoliciesPaginator(
        _ input: GetResourcePoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<GetResourcePoliciesRequest, GetResourcePoliciesResponse> {
        return .init(
            input: input,
            command: self.getResourcePolicies,
            inputKey: \GetResourcePoliciesRequest.nextToken,
            outputKey: \GetResourcePoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``getResourcePolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resourceArn: Amazon Resource Name (ARN) of the resource to which the policies are attached.
    ///   - logger: Logger used for logging
    @inlinable
    public func getResourcePoliciesPaginator(
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<GetResourcePoliciesRequest, GetResourcePoliciesResponse> {
        let input = GetResourcePoliciesRequest(
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.getResourcePoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssociationVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociationVersionsPaginator(
        _ input: ListAssociationVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssociationVersionsRequest, ListAssociationVersionsResult> {
        return .init(
            input: input,
            command: self.listAssociationVersions,
            inputKey: \ListAssociationVersionsRequest.nextToken,
            outputKey: \ListAssociationVersionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssociationVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - associationId: The association ID for which you want to view all versions.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociationVersionsPaginator(
        associationId: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssociationVersionsRequest, ListAssociationVersionsResult> {
        let input = ListAssociationVersionsRequest(
            associationId: associationId, 
            maxResults: maxResults
        )
        return self.listAssociationVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociationsPaginator(
        _ input: ListAssociationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAssociationsRequest, ListAssociationsResult> {
        return .init(
            input: input,
            command: self.listAssociations,
            inputKey: \ListAssociationsRequest.nextToken,
            outputKey: \ListAssociationsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAssociations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - associationFilterList: One or more filters. Use a filter to return a more specific list of results.  Filtering associations using the InstanceID attribute only returns legacy associations created using the InstanceID attribute. Associations targeting the managed node that are part of the Target Attributes ResourceGroup or Tags aren't returned.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAssociationsPaginator(
        associationFilterList: [AssociationFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAssociationsRequest, ListAssociationsResult> {
        let input = ListAssociationsRequest(
            associationFilterList: associationFilterList, 
            maxResults: maxResults
        )
        return self.listAssociationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCommandInvocations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCommandInvocationsPaginator(
        _ input: ListCommandInvocationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCommandInvocationsRequest, ListCommandInvocationsResult> {
        return .init(
            input: input,
            command: self.listCommandInvocations,
            inputKey: \ListCommandInvocationsRequest.nextToken,
            outputKey: \ListCommandInvocationsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCommandInvocations(_:logger:)``.
    ///
    /// - Parameters:
    ///   - commandId: (Optional) The invocations for a specific command ID.
    ///   - details: (Optional) If set this returns the response of the command executions and any command output. The default value is false.
    ///   - filters: (Optional) One or more filters. Use a filter to return a more specific list of results.
    ///   - instanceId: (Optional) The command execution details for a specific managed node ID.
    ///   - maxResults: (Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCommandInvocationsPaginator(
        commandId: String? = nil,
        details: Bool? = nil,
        filters: [CommandFilter]? = nil,
        instanceId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCommandInvocationsRequest, ListCommandInvocationsResult> {
        let input = ListCommandInvocationsRequest(
            commandId: commandId, 
            details: details, 
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults
        )
        return self.listCommandInvocationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCommands(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCommandsPaginator(
        _ input: ListCommandsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCommandsRequest, ListCommandsResult> {
        return .init(
            input: input,
            command: self.listCommands,
            inputKey: \ListCommandsRequest.nextToken,
            outputKey: \ListCommandsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCommands(_:logger:)``.
    ///
    /// - Parameters:
    ///   - commandId: (Optional) If provided, lists only the specified command.
    ///   - filters: (Optional) One or more filters. Use a filter to return a more specific list of results.
    ///   - instanceId: (Optional) Lists commands issued against this managed node ID.  You can't specify a managed node ID in the same command that you specify Status = Pending. This is because the command hasn't reached the managed node yet.
    ///   - maxResults: (Optional) The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCommandsPaginator(
        commandId: String? = nil,
        filters: [CommandFilter]? = nil,
        instanceId: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCommandsRequest, ListCommandsResult> {
        let input = ListCommandsRequest(
            commandId: commandId, 
            filters: filters, 
            instanceId: instanceId, 
            maxResults: maxResults
        )
        return self.listCommandsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComplianceItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComplianceItemsPaginator(
        _ input: ListComplianceItemsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComplianceItemsRequest, ListComplianceItemsResult> {
        return .init(
            input: input,
            command: self.listComplianceItems,
            inputKey: \ListComplianceItemsRequest.nextToken,
            outputKey: \ListComplianceItemsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComplianceItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more compliance filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - resourceIds: The ID for the resources from which to get compliance information. Currently, you can only specify one resource ID.
    ///   - resourceTypes: The type of resource from which to get compliance information. Currently, the only supported resource type is ManagedInstance.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComplianceItemsPaginator(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        resourceIds: [String]? = nil,
        resourceTypes: [String]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComplianceItemsRequest, ListComplianceItemsResult> {
        let input = ListComplianceItemsRequest(
            filters: filters, 
            maxResults: maxResults, 
            resourceIds: resourceIds, 
            resourceTypes: resourceTypes
        )
        return self.listComplianceItemsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listComplianceSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listComplianceSummariesPaginator(
        _ input: ListComplianceSummariesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListComplianceSummariesRequest, ListComplianceSummariesResult> {
        return .init(
            input: input,
            command: self.listComplianceSummaries,
            inputKey: \ListComplianceSummariesRequest.nextToken,
            outputKey: \ListComplianceSummariesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listComplianceSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more compliance or inventory filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. Currently, you can specify null or 50. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listComplianceSummariesPaginator(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListComplianceSummariesRequest, ListComplianceSummariesResult> {
        let input = ListComplianceSummariesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listComplianceSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDocumentVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentVersionsPaginator(
        _ input: ListDocumentVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDocumentVersionsRequest, ListDocumentVersionsResult> {
        return .init(
            input: input,
            command: self.listDocumentVersions,
            inputKey: \ListDocumentVersionsRequest.nextToken,
            outputKey: \ListDocumentVersionsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDocumentVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - name: The name of the document. You can specify an Amazon Resource Name (ARN).
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentVersionsPaginator(
        maxResults: Int? = nil,
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDocumentVersionsRequest, ListDocumentVersionsResult> {
        let input = ListDocumentVersionsRequest(
            maxResults: maxResults, 
            name: name
        )
        return self.listDocumentVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDocuments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentsPaginator(
        _ input: ListDocumentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDocumentsRequest, ListDocumentsResult> {
        return .init(
            input: input,
            command: self.listDocuments,
            inputKey: \ListDocumentsRequest.nextToken,
            outputKey: \ListDocumentsResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDocuments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - documentFilterList: This data type is deprecated. Instead, use Filters.
    ///   - filters: One or more DocumentKeyValuesFilter objects. Use a filter to return a more specific list of results. For keys, you can specify one or more key-value pair tags that have been applied to a document. Other valid keys include Owner, Name, PlatformTypes, DocumentType, and TargetType. For example, to return documents you own use Key=Owner,Values=Self. To specify a custom key-value pair, use the format Key=tag:tagName,Values=valueName.  This API operation only supports filtering documents by using a single tag key and one or more tag values. For example: Key=tag:tagName,Values=valueName1,valueName2
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentsPaginator(
        documentFilterList: [DocumentFilter]? = nil,
        filters: [DocumentKeyValuesFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDocumentsRequest, ListDocumentsResult> {
        let input = ListDocumentsRequest(
            documentFilterList: documentFilterList, 
            filters: filters, 
            maxResults: maxResults
        )
        return self.listDocumentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listNodes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listNodesPaginator(
        _ input: ListNodesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListNodesRequest, ListNodesResult> {
        return .init(
            input: input,
            command: self.listNodes,
            inputKey: \ListNodesRequest.nextToken,
            outputKey: \ListNodesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listNodes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of managed nodes.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - syncName: The name of the Amazon Web Services managed resource data sync to retrieve information about. For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is AWS-QuickSetup-ManagedNode. For single account/single-Region configurations, the parameter is not required.
    ///   - logger: Logger used for logging
    @inlinable
    public func listNodesPaginator(
        filters: [NodeFilter]? = nil,
        maxResults: Int? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListNodesRequest, ListNodesResult> {
        let input = ListNodesRequest(
            filters: filters, 
            maxResults: maxResults, 
            syncName: syncName
        )
        return self.listNodesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listNodesSummary(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listNodesSummaryPaginator(
        _ input: ListNodesSummaryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListNodesSummaryRequest, ListNodesSummaryResult> {
        return .init(
            input: input,
            command: self.listNodesSummary,
            inputKey: \ListNodesSummaryRequest.nextToken,
            outputKey: \ListNodesSummaryResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listNodesSummary(_:logger:)``.
    ///
    /// - Parameters:
    ///   - aggregators: Specify one or more aggregators to return a count of managed nodes that match that expression. For example, a count of managed nodes by operating system.
    ///   - filters: One or more filters. Use a filter to generate a summary that matches your specified filter criteria.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - syncName: The name of the Amazon Web Services managed resource data sync to retrieve information about. For cross-account/cross-Region configurations, this parameter is required, and the name of the supported resource data sync is AWS-QuickSetup-ManagedNode. For single account/single-Region configurations, the parameter is not required.
    ///   - logger: Logger used for logging
    @inlinable
    public func listNodesSummaryPaginator(
        aggregators: [NodeAggregator],
        filters: [NodeFilter]? = nil,
        maxResults: Int? = nil,
        syncName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListNodesSummaryRequest, ListNodesSummaryResult> {
        let input = ListNodesSummaryRequest(
            aggregators: aggregators, 
            filters: filters, 
            maxResults: maxResults, 
            syncName: syncName
        )
        return self.listNodesSummaryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOpsItemEvents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsItemEventsPaginator(
        _ input: ListOpsItemEventsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOpsItemEventsRequest, ListOpsItemEventsResponse> {
        return .init(
            input: input,
            command: self.listOpsItemEvents,
            inputKey: \ListOpsItemEventsRequest.nextToken,
            outputKey: \ListOpsItemEventsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOpsItemEvents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more OpsItem filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsItemEventsPaginator(
        filters: [OpsItemEventFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOpsItemEventsRequest, ListOpsItemEventsResponse> {
        let input = ListOpsItemEventsRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listOpsItemEventsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOpsItemRelatedItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsItemRelatedItemsPaginator(
        _ input: ListOpsItemRelatedItemsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOpsItemRelatedItemsRequest, ListOpsItemRelatedItemsResponse> {
        return .init(
            input: input,
            command: self.listOpsItemRelatedItems,
            inputKey: \ListOpsItemRelatedItemsRequest.nextToken,
            outputKey: \ListOpsItemRelatedItemsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOpsItemRelatedItems(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more OpsItem filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - opsItemId: The ID of the OpsItem for which you want to list all related-item resources.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsItemRelatedItemsPaginator(
        filters: [OpsItemRelatedItemsFilter]? = nil,
        maxResults: Int? = nil,
        opsItemId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOpsItemRelatedItemsRequest, ListOpsItemRelatedItemsResponse> {
        let input = ListOpsItemRelatedItemsRequest(
            filters: filters, 
            maxResults: maxResults, 
            opsItemId: opsItemId
        )
        return self.listOpsItemRelatedItemsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listOpsMetadata(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsMetadataPaginator(
        _ input: ListOpsMetadataRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListOpsMetadataRequest, ListOpsMetadataResult> {
        return .init(
            input: input,
            command: self.listOpsMetadata,
            inputKey: \ListOpsMetadataRequest.nextToken,
            outputKey: \ListOpsMetadataResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listOpsMetadata(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more filters to limit the number of OpsMetadata objects returned by the call.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listOpsMetadataPaginator(
        filters: [OpsMetadataFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListOpsMetadataRequest, ListOpsMetadataResult> {
        let input = ListOpsMetadataRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listOpsMetadataPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listResourceComplianceSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceComplianceSummariesPaginator(
        _ input: ListResourceComplianceSummariesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListResourceComplianceSummariesRequest, ListResourceComplianceSummariesResult> {
        return .init(
            input: input,
            command: self.listResourceComplianceSummaries,
            inputKey: \ListResourceComplianceSummariesRequest.nextToken,
            outputKey: \ListResourceComplianceSummariesResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listResourceComplianceSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filters: One or more filters. Use a filter to return a more specific list of results.
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceComplianceSummariesPaginator(
        filters: [ComplianceStringFilter]? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListResourceComplianceSummariesRequest, ListResourceComplianceSummariesResult> {
        let input = ListResourceComplianceSummariesRequest(
            filters: filters, 
            maxResults: maxResults
        )
        return self.listResourceComplianceSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listResourceDataSync(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceDataSyncPaginator(
        _ input: ListResourceDataSyncRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListResourceDataSyncRequest, ListResourceDataSyncResult> {
        return .init(
            input: input,
            command: self.listResourceDataSync,
            inputKey: \ListResourceDataSyncRequest.nextToken,
            outputKey: \ListResourceDataSyncResult.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listResourceDataSync(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of items to return for this call. The call also returns a token that you can specify in a subsequent call to get the next set of results.
    ///   - syncType: View a list of resource data syncs according to the sync type. Specify SyncToDestination to view resource data syncs that synchronize data to an Amazon S3 bucket. Specify SyncFromSource to view resource data syncs from Organizations or from multiple Amazon Web Services Regions.
    ///   - logger: Logger used for logging
    @inlinable
    public func listResourceDataSyncPaginator(
        maxResults: Int? = nil,
        syncType: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListResourceDataSyncRequest, ListResourceDataSyncResult> {
        let input = ListResourceDataSyncRequest(
            maxResults: maxResults, 
            syncType: syncType
        )
        return self.listResourceDataSyncPaginator(input, logger: logger)
    }
}

extension SSM.DescribeActivationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeActivationsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeAssociationExecutionTargetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeAssociationExecutionTargetsRequest {
        return .init(
            associationId: self.associationId,
            executionId: self.executionId,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeAssociationExecutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeAssociationExecutionsRequest {
        return .init(
            associationId: self.associationId,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeAutomationExecutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeAutomationExecutionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeAutomationStepExecutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeAutomationStepExecutionsRequest {
        return .init(
            automationExecutionId: self.automationExecutionId,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            reverseOrder: self.reverseOrder
        )
    }
}

extension SSM.DescribeAvailablePatchesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeAvailablePatchesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeEffectiveInstanceAssociationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeEffectiveInstanceAssociationsRequest {
        return .init(
            instanceId: self.instanceId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeEffectivePatchesForPatchBaselineRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeEffectivePatchesForPatchBaselineRequest {
        return .init(
            baselineId: self.baselineId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInstanceAssociationsStatusRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstanceAssociationsStatusRequest {
        return .init(
            instanceId: self.instanceId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInstanceInformationRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstanceInformationRequest {
        return .init(
            filters: self.filters,
            instanceInformationFilterList: self.instanceInformationFilterList,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInstancePatchStatesForPatchGroupRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstancePatchStatesForPatchGroupRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            patchGroup: self.patchGroup
        )
    }
}

extension SSM.DescribeInstancePatchStatesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstancePatchStatesRequest {
        return .init(
            instanceIds: self.instanceIds,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInstancePatchesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstancePatchesRequest {
        return .init(
            filters: self.filters,
            instanceId: self.instanceId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInstancePropertiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInstancePropertiesRequest {
        return .init(
            filtersWithOperator: self.filtersWithOperator,
            instancePropertyFilterList: self.instancePropertyFilterList,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeInventoryDeletionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeInventoryDeletionsRequest {
        return .init(
            deletionId: self.deletionId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeMaintenanceWindowExecutionTaskInvocationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowExecutionTaskInvocationsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            taskId: self.taskId,
            windowExecutionId: self.windowExecutionId
        )
    }
}

extension SSM.DescribeMaintenanceWindowExecutionTasksRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowExecutionTasksRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            windowExecutionId: self.windowExecutionId
        )
    }
}

extension SSM.DescribeMaintenanceWindowExecutionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowExecutionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            windowId: self.windowId
        )
    }
}

extension SSM.DescribeMaintenanceWindowScheduleRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowScheduleRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            resourceType: self.resourceType,
            targets: self.targets,
            windowId: self.windowId
        )
    }
}

extension SSM.DescribeMaintenanceWindowTargetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowTargetsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            windowId: self.windowId
        )
    }
}

extension SSM.DescribeMaintenanceWindowTasksRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowTasksRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            windowId: self.windowId
        )
    }
}

extension SSM.DescribeMaintenanceWindowsForTargetRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowsForTargetRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceType: self.resourceType,
            targets: self.targets
        )
    }
}

extension SSM.DescribeMaintenanceWindowsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeMaintenanceWindowsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribeOpsItemsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeOpsItemsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            opsItemFilters: self.opsItemFilters
        )
    }
}

extension SSM.DescribeParametersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeParametersRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            parameterFilters: self.parameterFilters,
            shared: self.shared
        )
    }
}

extension SSM.DescribePatchBaselinesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribePatchBaselinesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribePatchGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribePatchGroupsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.DescribePatchPropertiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribePatchPropertiesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            operatingSystem: self.operatingSystem,
            patchSet: self.patchSet,
            property: self.property
        )
    }
}

extension SSM.DescribeSessionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.DescribeSessionsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            state: self.state
        )
    }
}

extension SSM.GetInventoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetInventoryRequest {
        return .init(
            aggregators: self.aggregators,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            resultAttributes: self.resultAttributes
        )
    }
}

extension SSM.GetInventorySchemaRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetInventorySchemaRequest {
        return .init(
            aggregator: self.aggregator,
            maxResults: self.maxResults,
            nextToken: token,
            subType: self.subType,
            typeName: self.typeName
        )
    }
}

extension SSM.GetOpsSummaryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetOpsSummaryRequest {
        return .init(
            aggregators: self.aggregators,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            resultAttributes: self.resultAttributes,
            syncName: self.syncName
        )
    }
}

extension SSM.GetParameterHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetParameterHistoryRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token,
            withDecryption: self.withDecryption
        )
    }
}

extension SSM.GetParametersByPathRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetParametersByPathRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            parameterFilters: self.parameterFilters,
            path: self.path,
            recursive: self.recursive,
            withDecryption: self.withDecryption
        )
    }
}

extension SSM.GetResourcePoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.GetResourcePoliciesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension SSM.ListAssociationVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListAssociationVersionsRequest {
        return .init(
            associationId: self.associationId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListAssociationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListAssociationsRequest {
        return .init(
            associationFilterList: self.associationFilterList,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListCommandInvocationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListCommandInvocationsRequest {
        return .init(
            commandId: self.commandId,
            details: self.details,
            filters: self.filters,
            instanceId: self.instanceId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListCommandsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListCommandsRequest {
        return .init(
            commandId: self.commandId,
            filters: self.filters,
            instanceId: self.instanceId,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListComplianceItemsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListComplianceItemsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            resourceIds: self.resourceIds,
            resourceTypes: self.resourceTypes
        )
    }
}

extension SSM.ListComplianceSummariesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListComplianceSummariesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListDocumentVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListDocumentVersionsRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token
        )
    }
}

extension SSM.ListDocumentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListDocumentsRequest {
        return .init(
            documentFilterList: self.documentFilterList,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListNodesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListNodesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            syncName: self.syncName
        )
    }
}

extension SSM.ListNodesSummaryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListNodesSummaryRequest {
        return .init(
            aggregators: self.aggregators,
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            syncName: self.syncName
        )
    }
}

extension SSM.ListOpsItemEventsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListOpsItemEventsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListOpsItemRelatedItemsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListOpsItemRelatedItemsRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token,
            opsItemId: self.opsItemId
        )
    }
}

extension SSM.ListOpsMetadataRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListOpsMetadataRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListResourceComplianceSummariesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListResourceComplianceSummariesRequest {
        return .init(
            filters: self.filters,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSM.ListResourceDataSyncRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSM.ListResourceDataSyncRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            syncType: self.syncType
        )
    }
}

// MARK: Waiters

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension SSM {
    /// Waiter for operation ``getCommandInvocation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilCommandExecuted(
        _ input: GetCommandInvocationRequest,
        maxWaitTime: TimeAmount? = nil,
        logger: Logger = AWSClient.loggingDisabled
    ) async throws {
        let waiter = AWSClient.Waiter<GetCommandInvocationRequest, _>(
            acceptors: [
                .init(state: .retry, matcher: try! JMESPathMatcher("status", expected: "Pending")),
                .init(state: .retry, matcher: try! JMESPathMatcher("status", expected: "InProgress")),
                .init(state: .retry, matcher: try! JMESPathMatcher("status", expected: "Delayed")),
                .init(state: .success, matcher: try! JMESPathMatcher("status", expected: "Success")),
                .init(state: .failure, matcher: try! JMESPathMatcher("status", expected: "Cancelled")),
                .init(state: .failure, matcher: try! JMESPathMatcher("status", expected: "TimedOut")),
                .init(state: .failure, matcher: try! JMESPathMatcher("status", expected: "Failed")),
                .init(state: .failure, matcher: try! JMESPathMatcher("status", expected: "Cancelling")),
                .init(state: .retry, matcher: AWSErrorCodeMatcher("InvocationDoesNotExist")),
            ],
            minDelayTime: .seconds(5),
            command: self.getCommandInvocation
        )
        return try await self.client.waitUntil(input, waiter: waiter, maxWaitTime: maxWaitTime, logger: logger)
    }
    /// Waiter for operation ``getCommandInvocation(_:logger:)``.
    ///
    /// - Parameters:
    ///   - commandId: (Required) The parent command ID of the invocation plugin.
    ///   - instanceId: (Required) The ID of the managed node targeted by the command. A managed node can be an Amazon Elastic Compute Cloud (Amazon EC2) instance, edge device, and on-premises server or VM in your hybrid environment that is configured for Amazon Web Services Systems Manager.
    ///   - pluginName: The name of the step for which you want detailed results. If the document contains only one step, you can omit the name and details for that step. If the document contains more than one step, you must specify the name of the step for which you want to view details. Be sure to specify the name of the step, not the name of a plugin like aws:RunShellScript. To find the PluginName, check the document content and find the name of the step you want details for. Alternatively, use ListCommandInvocations with the CommandId and Details parameters. The PluginName is the Name attribute of the CommandPlugin object in the CommandPlugins list.
    ///   - logger: Logger used for logging
    @inlinable
    public func waitUntilCommandExecuted(
        commandId: String,
        instanceId: String,
        pluginName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = GetCommandInvocationRequest(
            commandId: commandId, 
            instanceId: instanceId, 
            pluginName: pluginName
        )
        try await self.waitUntilCommandExecuted(input, logger: logger)
    }
}
